2017-01-13 14 views
7

Sau khi tôi đã thực hiện hợp nhất với nhánh chính của tôi từ một nhánh làm việc với git, đôi khi tôi muốn tìm để tìm commit cuối cùng trên master trước khi hợp nhất xảy ra. Làm thế nào để tôi làm điều này?Làm thế nào để tìm git cam kết cuối cùng trước khi hợp nhất

+0

Bạn có thể thử 'git log -1', nó sẽ cung cấp chi tiết về lần commit cuối cùng của nhánh đã chọn. Tương tự, 'git log -2' sẽ cung cấp chi tiết về 2 lần commit cuối cùng. – Abhi

+0

Ngoài ra hãy thử sử dụng gitk để trực quan hóa cấu trúc và kiểm tra bất kỳ tập lệnh nào, chỉ trong trường hợp chúng không có được cơ sở hợp nhất (điểm ngã ba). –

Trả lời

3

Một cách nhanh chóng để làm điều này là để gõ

git log --pretty=format:'%h : %s' --graph 

sau đó chỉ cần làm theo xuống đồ thị ở phía bên tay phải cho đến khi bạn tìm thấy những điểm hợp nhất. Bạn cũng có thể làm

git log --pretty=format:'%h : %s' --graph > temp.txt 

trong đó đặt đầu ra vào một tập tin, temp.txt, mà bạn có thể mở trong trình soạn thảo của bạn và sử dụng các công cụ tìm kiếm để tìm kiếm văn bản như hợp nhất.

Cách tiếp cận này rất hữu ích để trả lời rất nhiều câu hỏi khác về dòng dõi của mới nhất của bạn cam kết như vậy đã đưa

alias git_graph="git log --pretty=format:'%h : %s' --graph" 

trong tập tin .bash_profile của tôi vì vậy tôi chỉ có thể sử dụng `` `git_log`` để xem thông tin này .

+0

tại sao không phải 'git log -1'? – mallaudin

+0

@mallaudin: Tôi tin rằng Obromios đang đề cập đến một tình huống trong đó hợp nhất là một vài hoặc thậm chí nhiều commit * đằng sau * đầu của 'master'.Tức là, 'git log -1' sẽ chỉ hiển thị một cam kết không hợp nhất. – torek

+0

Vâng. Đung. Tôi nghĩ như bây giờ. – mallaudin

4

Cách nhanh chóng để xác định cam kết sau khi hợp nhất đã xảy ra là sử dụng reflog.

Giả sử rằng hoạt động Đã xảy ra cuối cùng là một hợp nhất, sau đó:

git log [email protected]{1} -1 

[email protected]{1} đề cập đến các HEAD trước trước khi phẫu thuật cuối cùng, vì vậy bạn có thể giải quyết nó bằng cách sử log và reflog.

git log sẽ hiển thị cho bạn chuỗi các cam kết trong nhánh hiện tại, vì vậy sau khi hợp nhất, nó luôn là cam kết hợp nhất và ngay trước khi cam kết từ nhánh đã hợp nhất. git reflog hiển thị chuỗi các hoạt động trong kho lưu trữ của bạn (ví dụ: hợp nhất, rebase). Như được giải thích trong tài liệu:

Nhật ký tham chiếu hoặc "reflog", ghi lại khi các mẹo của chi nhánh và tài liệu tham khảo khác được cập nhật trong kho lưu trữ cục bộ. Reflogs rất hữu ích trong các lệnh Git khác nhau, để xác định giá trị cũ của một tham chiếu.

+0

Khi tôi thử điều này, nó đã đưa ra cam kết cuối cùng trên nhánh đã được hợp nhất, không phải lần commit cuối cùng trên master trước khi nhánh được sáp nhập. – Obromios

+0

@Obromios, những gì git reflog --oneline hiển thị? những gì hoạt động trong danh sách? Bạn nên chọn tiếp theo trước khi hợp nhất (ví dụ: nếu HEAD @ {0} - hợp nhất, sau đó HEAD @ {1}), tôi nghĩ hợp nhất không phải là hoạt động cuối cùng, – 2oppin

3

Nếu bạn đã sáp nhập branch vào master, đây là một cách để tìm ra hợp nhất cam kết:

# With the ancestry-path option, 'git rev-list branch..master' (or git log) 
# will only list commits which are parents of 'master' 
# *and* children of 'branch' 
# 
# If 'branch' was merged into 'master', the last commit in this list 
# is the merge commit : 
$ git rev-list --ancestry-path branch..master | tail -1 

Tình trạng của master trước khi hợp nhất là này của cam cha mẹ đầu tiên:

$ h=`git rev-list --ancestry-path branch..master | tail -1` 
$ git log $h^ 
+0

Tôi đã kiểm tra điều này và nó hoạt động, cảm ơn bạn. Tuy nhiên tôi sẽ chấp nhận câu trả lời của tôi, stackoverflow.com/a/41628915/1299362, vì nó thường hữu ích hơn. Tôi có thể thấy bản thân mình sử dụng câu trả lời của bạn nếu hợp nhất là một chặng đường dài, dài. – Obromios

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