2012-05-14 26 views
8

Có một tệp trong kho lưu trữ git của chúng tôi đang hoạt động, tôi muốn tìm ra người đã hợp nhất tệp này vào một chi nhánh.Làm thế nào để bạn tìm thấy ai đã sáp nhập một cam kết git vào một chi nhánh?

Tôi có băm cam kết xác định cam kết (cho phép nói 552a976f1a25f9bad57efb9455e951f6b7b3367f) giới thiệu tệp và tôi biết rằng tệp đó nằm trên chi nhánh staging.

Tôi làm cách nào để tìm mã băm của cam kết đã hợp nhất cam kết ở trên vào chi nhánh staging? Tôi muốn tìm người dùng đã hợp nhất và ngày hợp nhất.

+0

Đây có phải là sự hợp nhất thực tế (trái ngược với sự hợp nhất nhanh về phía trước) không? Và bạn không thể sử dụng 'git log path/to/the/file' (hoặc' gitk')? – svick

+0

git log hiển thị tên của người đã cam kết tệp, tôi muốn tìm những người đã hợp nhất cam kết đó vào nhánh dàn dựng. –

Trả lời

1
git log <commit-id>..<branch> --ancestry-path --merges --reverse 

sẽ cung cấp cho bạn danh sách các ô hợp nhất đã xảy ra kể từ khi <commit-id> mà bạn đang quan tâm và các tình trạng hiện thời của số <branch>. Tùy thuộc vào quy trình làm việc hợp nhất của bạn, hợp nhất mà bạn quan tâm có thể là kết hợp đầu tiên trong danh sách hoặc một trong những kế tiếp.

Nó sẽ rất hữu ích để hình dung các phần có liên quan của lịch sử với

git log --oneline --graph --decorate --ancestry-path --boundary <commit-id>..<branch> 

Hãy tìm <commit-id> ở gần đáy của đồ thị (nó sẽ thuộc về "đồ ranh giới" - được đánh dấu bằng o hơn *) .

1
git log -1 --merges <hash> 

Sẽ hiển thị nhật ký hợp nhất gần đây nhất kể từ cam kết <hash> (bao gồm chính nó).

+1

Đây là một giải pháp khá tốt, đôi khi hợp nhất là lần hợp nhất đầu tiên, nhưng không phải lúc nào cũng vậy. Trong trường hợp của tôi, đó là lần hợp nhất thứ hai mà tôi đã quan tâm. –

+0

'git log ' sẽ hiển thị cho bạn các cam kết ** trước ** , không phải sau (nghĩa là nó sẽ hiển thị tổ tiên của ). Vì vậy, lệnh này sẽ hiển thị kết hợp cuối cùng * trước * cam kết của bạn, không phải là hợp nhất đã đưa nó vào nhánh chính. –

2

branches

Nếu tôi hiểu bạn một cách chính xác, bạn có C5, và bạn đang tìm kiếm C6. Nếu đúng như vậy, có thể bạn đang tìm kiếm điều này:

git rev-list --merges HEAD --not <hash> --reverse 

Nó sẽ cung cấp cho bạn danh sách các cam kết hợp nhất xảy ra sau khi băm cam kết của bạn. Tôi sử dụng HEAD trong lệnh này tin rằng bạn đang ở trên master, trong ví dụ hoặc staging trong trường hợp của bạn.

Trong một môi trường không-quá-phức tạp có thể bạn đang tìm kiếm hợp nhất đầu tiên mà đã xảy ra sau khi bạn cam kết ... Nhưng nếu bạn chưa có loại này may rủi, Bạn có thể thử:

git log --graph --decorate HEAD...<hash>^ 

Hoặc bất kỳ công cụ đồ họa để khám phá lịch sử của bạn (chẳng hạn như gitk) ...

Các vấn đề liên quan