ฉันได้ทดลองเล็กน้อยและดูเหมือนจะใช้เคล็ดลับในการนำทางไปข้างหน้า ( แก้ไข : จะใช้ได้ดีก็ต่อเมื่อคุณมีประวัติเชิงเส้นโดยไม่ต้องรวมคอมมิต):
git checkout $(git rev-list --topo-order HEAD..towards | tail -1)
ที่towardsเป็น SHA1 ของการกระทำหรือแท็ก
คำอธิบาย:
- คำสั่งภายใน
$()หมายถึง: รับคอมมิตทั้งหมดระหว่างกระแสHEADและคอมtowardsมิต (ไม่รวมHEAD) และเรียงลำดับตามลำดับความสำคัญ (เหมือนgit logตามค่าเริ่มต้น - แทนลำดับเวลาซึ่งเป็นค่าเริ่มต้นอย่างแปลกสำหรับrev-list) จากนั้นใช้ค่าสุดท้าย ( tail) คือคนที่เราอยากไป
- สิ่งนี้ได้รับการประเมินใน subshell และส่งไป
git checkoutยังเพื่อดำเนินการชำระเงิน
คุณสามารถกำหนดฟังก์ชันที่สามารถเข้าถึงได้เป็นนามแฝงที่คาดหวังพารามิเตอร์ใน.profileไฟล์ของคุณเพื่อนำทางไปข้างหน้าไปยังคอมมิตเฉพาะ:
# Go forward in Git commit hierarchy, towards particular commit
# Usage:
# gofwd v1.2.7
# Does nothing when the parameter is not specified.
gofwd() {
git checkout $(git rev-list --topo-order HEAD.."$*" | tail -1)
}
# Go back in Git commit hierarchy
# Usage:
# goback
alias goback='git checkout HEAD~'