2013-04-08 77 views
19

我已經做了一些搜索,發現:git log僅返回對主分支進行的提交?

git log myBranchName 

一個可能的解決方案。但是當我的分支是主分支時會發生什麼?當我運行時:

git log master 

它似乎返回所有提交到任何分支。根據我讀過的內容,它列出了與主分支相關的所有提交。瞭解這一點,我如何才能調用主分支的提交歷史記錄?

回答

39

我覺得這是你想要

git log --first-parent master 

引述手動

按照只有第一父提交見狀合併提交什麼。這個 選項可以在查看特定主題分支的演變時給出更好的概述,因爲合併到主題分支往往只有 關於調整上游時不時更新,而這個 選項允許您忽略個人通過這種合併提交到您的 歷史記錄。

+3

'--first-parent master'對於我正在處理的問題非常有用:確定哪些合併(--merges)進入了master,vs合併到主題分支上。 – 2013-09-20 20:31:36

+0

謝謝。我認爲我應該以解決這個問題的方式進行市場營銷。 – 2014-11-19 18:07:25

+0

只是單挑,它並不完美。如果之前對'master'的提交碰巧被列爲提交的_second_父項,這會給你一個錯誤的提示。但是,如果您遵循GitHub的pull請求/合併流程,通常不會發生這種情況。 – PJSCopeland 2017-08-17 21:36:14

10

由於Git的分支模型,提交不屬於一個或多個分支。分支是指向整個提交圖中單個提交對象的指針。所以當你說X中的一個提交是「在分支X上」的時候,你通常意味着它在分支X指向的提交開始時是可訪問的。

對於git log,默認行爲是等於git log HEAD其中HEAD是指提交當前分支目前指着。因此,如果您在主分支上,它等於git log master,顯示從最近的提交開始時可以訪問的所有提交。

不幸的是,你提到的作爲對某個分支的提交在Git中沒有明確定義。如果我在主服務器上進行提交,然後創建一個指向相同提交的新分支(例如使用git branch newbranch),那麼除了名稱之外,該分支字面上與主分支相同。因此,每個屬性「在分支主人」「現在也意味着」在分支新分支「。因此你不能在Git中擁有這個屬性。

即使parkydr的解決方案,它顯示所有僅在合併的一側進行的提交,並不是一個失敗的解決方案。理想情況下,它會隱藏所有那些在獨立的非主分支上進行的提交,然後合併回主。因此,您只會直接向主線提交提交或在其他提交中合併提交合並的提交。但是有兩件事情,這將阻止這樣做:

  1. 快進合併:當您從主分支,並創建一些提交,而在主直接創建沒有新的,然後在主一git merge somebranch將快 - 提交提交,導致主分支指向與some branch相同的提交。因此,您「失去」那些提交最初在獨立分支上創建的信息。儘管如此,你可以強制Git始終創建合併提交,使用git merge --no-ff,但這對你以後不會有所幫助。
  2. 並不保證合併順序:當你在master上並且合併一個分支時,那麼以前的主提交將總是作爲第一個父項。所以你會得到你想要的行爲。但是,完全有可能在所述分支上,並且將主合併代替,導致主提交是第二個父代。然後master可以被快速轉發(或重置)到新的提交,從而產生一個「反向」視圖。

所以,底線是,你不能安全地得到這樣的歷史。你最好習慣Git靈活的分支模型的工作原理。

相關問題