2012-04-20 20 views
66

Giả git của bạn cam kết lịch sử trông như thế này:Git: Làm thế nào để danh sách cam kết về chi nhánh này nhưng không phải từ các chi nhánh sáp nhập

A---B---C---D---E---F master 
    \  /
     X---Y---Z topic 

Có thể có danh sách git chỉ các cam kết về tổng thể, A-F? Nói cách khác, nếu cam kết trên một nhánh hợp nhất, tôi không muốn nó hiển thị.

+1

Vì vậy, làm thế nào để biết được 'D' và' Z' là một phần của chi nhánh đã hợp nhất? – Romain

+1

Khi hợp nhất từ ​​chủ, các cam kết chính trước đó là cha mẹ đầu tiên trong hợp nhất. 'git log' chỉ cho phép hiển thị các commit đó với' --first-parent', vì vậy bạn có thể tìm được đúng các quyền – CharlesB

+0

bản sao của [Làm cách nào để chạy Git Log chỉ xem các thay đổi cho một nhánh cụ thể?] (http://stackoverflow.com/questions/4649356/how-do-i-run-git-log-to-see-changes-only-for-a-specific-branch) –

Trả lời

94

git log có tùy chọn --first-parent, vì vậy bạn sẽ không nhận được topic lịch sử.

Khi hợp nhất từ ​​master, cam kết master là cha mẹ đầu tiên hợp nhất. Nhật ký Git chỉ cho phép hiển thị các cam kết đó với --first-parent, do đó bạn có được nội dung phù hợp.

+15

+1 '--first-parent' hiện nó :) kết hợp với' --no-merges' bạn có thể ẩn các cam kết hợp nhất – c00kiemon5ter

+1

Điều này làm việc tuyệt vời với 'tig' https://github.com/jonas/tig –

-2

Điều này có hiệu quả không?

git log master 
git log --stat master 
+0

Không ai không hoạt động. Cam kết hợp nhất có hai cha mẹ; mọi thứ theo dõi từ cả hai bố mẹ đó đều nằm trong nhánh 'master'. – GoZoner

16

Có một cách tổng quát để đi về vấn đề này mà không dựa vào --first-parent mà sẽ rất hữu ích trong những tình huống nhất định .. sử dụng các bộ lọc loại trừ chi nhánh

git log origin/topic ^origin/master này sẽ cung cấp cho bạn một bản ghi của origin/topic với tất cả các Đã xóa các cam kết của origin/master.

bạn cũng có thể thêm trong --no-merges sẽ ẩn các cam kết hợp nhất mà bạn có thể hoặc không muốn.

Một mẹo hữu ích khác là sử dụng shortlog thay vì log, nó sẽ cung cấp cho bạn thêm tóm tắt ngắn gọn có thể hữu ích cho ghi chú phát hành hoặc liên lạc về những gì trong nhánh.

Cập nhật
Sau khi đọc này, bạn thực sự muốn gần nghịch đảo của những gì tôi đăng tải; tuy nhiên nó sẽ không bao gồm tất cả mọi thứ trên master và foo (git log origin/master ^origin/foo). Tuy nhiên, bạn cũng có thể nhận được những gì bạn yêu cầu (ẩn tất cả các cam kết là một phần của việc hợp nhất) với git log origin/master --no-merges