2013-04-17 27 views
10

Tôi đã thấy lệnh git sử dụng cú pháp như HEAD~, nhưng tôi không thể tìm thấy cú pháp này trong Git Reference Manual.Đề cập đến cam kết trước đó/tiếp theo trong git?

Dưới đây là những gì tôi đã hiểu: <commit>~<n> đề cập đến cam kết < n> bước sớm hơn < cam kết> (nơi < n> là một số nguyên), và commit~ chỉ có nghĩa là giống nhau và rằng < n> ngầm là một.

Bây giờ, điều này có đúng không? Trong trường hợp đó, việc này có luôn hoạt động không? Điều gì xảy ra nếu < cam kết> là kết quả của việc hợp nhất giữa hai chi nhánh, sau đó cam kết sẽ <commit>~ tham chiếu? Có một số cú pháp tương ứng để tham khảo cam kết tiếp theo hoặc cam kết < n> các bước sau đó không?

Trả lời

11

Bạn có một lời giải thích rất rõ ràng về cách làm việc này trong chương về Acenstry References in Pro Git:

  • ~ được sử dụng để có được phụ huynh đầu tiên
  • ^có thể được sử dụng để có được các bậc phụ huynh khác (^ 2 cho ví dụ để hợp nhất)

Nhưng bạn không có cách đơn giản để tham khảo cam kết tiếp theo, ngay cả khi there are more convoluted ways để tải xuống.

+0

Cảm ơn. Tài liệu tham khảo dường như không phải là nơi thích hợp để tìm kiếm - tôi nghĩ nó cũng sẽ bao gồm cả cú pháp của Git. – HelloGoodbye

12

Để đơn giản trả lời câu hỏi từ tiêu đề (vì đó là những gì tôi đã ở đây từ Google):

Để kiểm tra các trước cam kết:

git checkout HEAD^ 

Để kiểm tra các cam kết tiếp theo (giả sử không có nhánh) :

git checkout `git log --reverse --ancestry-path HEAD..master | head -n 1 | cut -d \ -f 2` 
2

Lấy cảm hứng từ câu trả lời @ cexbrayat, tôi thấy nó hữu ích để suy nghĩ về nó theo cách này:

.210

Làm thế nào để ám chỉ cái gì trong một tổ tiên cam kết, nơi một cam kết có thể có nhiều bậc phụ huynh:

  • ^n quy định cụ thể mà cha mẹ

  • ~n quy định cụ thể mà hệ

Cả hai mặc định một.

+1

Đó là một quy tắc khá tốt :) Mặc dù nó bị hỏng khi không có '^ n' hay' ~ n' nào được chỉ định. – HelloGoodbye

+0

Điều đó chỉ để lại băm cam kết, trong đó đề cập đến .. chính nó. Tôi cho rằng tôi nên có quy định rằng một băm cam kết nên được bao gồm là tốt. Ý bạn là gì? –

+1

Tôi đoán bạn có nghĩa là họ mặc định một, như đối số cho một chức năng trong lập trình có thể có giá trị mặc định nếu bạn không chỉ định chúng? Tôi nghĩ rằng nếu bạn có một chức năng mà cả hai thế hệ và cha mẹ và trả về một tham chiếu cam kết, và nếu bạn không chỉ định bất kỳ của họ, bạn sẽ chỉ có cam kết bạn bắt đầu với. Vì vậy, trong trường hợp này, thế hệ sẽ là 0 ngay cả khi bạn không chỉ định thế hệ nào. Mặc dù tôi nhận ra rằng cha mẹ thực sự chỉ có liên quan khi thế hệ trong 1, do đó, hai có một chức năng như vậy không có ý nghĩa rất nhiều. – HelloGoodbye