Làm thế nào để có được cha mẹ của một cam kết hợp nhất trong git?


140

Một số lệnh git lấy cha mẹ làm bản sửa đổi; những người khác (chẳng hạn như git revert), như một số cha mẹ. Làm thế nào để có được cha mẹ cho cả hai trường hợp. Tôi không muốn sử dụng lệnh nhật ký đồ họa vì điều đó thường yêu cầu cuộn xuống một cây dài để tìm cha mẹ thứ hai.

Câu trả lời:


179

Đơn giản git log <hash>được gọi cho một cam kết hợp nhất hiển thị băm viết tắt của cha mẹ của nó:

 $ git log -1 395f65d
 commit 395f65d438b13fb1fded88a330dc06c3b0951046
 Merge: 9901923 d28790d
 ...

git đầu ra cha mẹ theo số của họ: hàm băm đầu tiên (ngoài cùng bên trái) dành cho cha mẹ đầu tiên, v.v.

Nếu tất cả những gì bạn muốn chỉ là băm, hai lựa chọn tương đương là:

$ git log --pretty=%P -n 1 <commit>
$ git show -s --pretty=%P <commit>

git rev-list cũng có thể hiển thị các giá trị băm của cha mẹ, mặc dù trước tiên nó sẽ liệt kê hàm băm cho một cam kết:

$ git rev-list --parents -n 1 <commit>

Nếu bạn muốn kiểm tra các phụ huynh, bạn có thể tham khảo trực tiếp với họ bằng carat như <commit>^1<commit>^2, ví dụ như:

git show <commit>^1

Điều này không khái quát; đối với hợp nhất bạch tuộc, bạn có thể tham khảo cha mẹ thứ n là <commit>^n. Bạn có thể tham khảo tất cả các bậc cha mẹ với <commit>^@, mặc dù điều này không hoạt động khi một cam kết duy nhất được yêu cầu. Hậu tố bổ sung có thể xuất hiện sau khi n th cú pháp cha mẹ (ví dụ <commit>^2^, <commit>^2^@), trong khi họ có thể không phải sau ^@( <commit>^@^không hợp lệ). Để biết thêm về cú pháp này, đọc rev-parsetrang người đàn ông.


1
Trả lời câu hỏi của riêng tôi: kết quả của 'git rev-list --parents -n 1 <somehash>' là: <somehash> <Parent1> <Parent2>. Tức là cha mẹ là một số.
mikemaccana

Bạn cũng có thể sử dụng git-cha mẹ github.com/danielribeiro/dotfiles/blob/master/bin/git-parents . Chỉ cần đặt nó vào PATH của bạn và gọi $ git cha mẹ <commit> (<commit> mặc định cho CHÍNH)
Daniel Ribeiro

@jefromi, tôi thực sự muốn phần "Ngoài ra lưu ý rằng đầu ra nhật ký bình thường không hiển thị ..." nằm ở đầu câu trả lời của bạn. :)
Adam Monsen

3
git loggit showđầu ra những thứ rất khác nhau khi chỉ có một cha mẹ. Thích git lognếu bạn muốn sự nhất quán.
Noel Yap

Câu trả lời này không hoạt động trên máy Ubuntu của tôi với git (v2.17.1). Tôi không thấy Mergetập tin trong git log -1đầu ra.
mja

29

Sau đây là cách đơn giản nhất mà tôi đã tìm thấy để xem cha mẹ của hợp nhất

git show --pretty=raw 3706454

14
git cat-file -p 3706454 là như nhau nhưng thậm chí còn ngắn hơn :)
sabgenton

1
Cả hai đều rất hữu ích!
tecknut

Một tùy chọn khácgit log --pretty=raw -1 3706454
selalerer
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.