2012-04-20 156 views
66

假設你的git的承諾歷史承諾如下:的Git:如何列出這個分支,但沒有從合併分支機構

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

是否有可能讓Git名單隻掌握了提交,A-F?換句話說,如果提交是在一個合併分支上,我不希望它顯示。

+1

那麼,Git怎麼知道'D'和'Z'是合併分支的一部分? – Romain 2012-04-20 14:53:06

+1

當與主人合併時,以前的主要提交是合併中的第一個父母。 'git log'只允許顯示那些用'--first-parent'進行的提交,所以你得到正確的東西 – CharlesB 2012-04-20 14:56:11

+0

可能的重複[如何運行Git Log來查看僅針對特定分支的更改?](http:/ /stackoverflow.com/questions/4649356/how-do-i-run-git-log-to-see-changes-only-for-a-specific-branch) – 2013-11-06 09:18:03

回答

94

git log有選擇--first-parent,所以你不會得到topic歷史。

當從master合併時,master提交是合併中的第一個父項。 Git日誌允許僅顯示那些使用--first-parent的提交,這樣你就可以得到正確的東西。

+15

+1'--first-parent'這樣做:)與'--no-merges'結合,你可以隱藏合併提交 – c00kiemon5ter 2012-04-20 14:58:04

+1

這對'tig'很有用https://github.com/jonas/tig – 2013-11-04 23:57:40

-2

這不行嗎?

git log master 
git log --stat master 
+0

沒有這些不工作。合併提交有兩個父母;從父母那裏追蹤的一切都在'主'分支上。 – GoZoner 2012-04-21 04:27:23

16

有去了解這一點,不依賴於--first-parent這將是在某些情況下有幫助..使用分支排除過濾器

git log origin/topic ^origin/master這會給你一個日誌origin/topic與所有的另一個通用方式origin/master的提交已刪除。

您還可以添加--no-merges這將隱藏您可能或不需要的合併提交。

另一個方便的提示是使用shortlog而不是log這將給你更多的簡化總結,可以方便地發佈註釋,或在分支什麼的溝通。

更新
重新閱讀此之後,你其實想的是什麼我張貼幾乎相反;然而它最終會排除master和foo上的所有內容(git log origin/master ^origin/foo)。然而,你也可以得到你要求的東西(隱藏所有提交合並的一部分)git log origin/master --no-merges