假設我的Git存儲庫擁有分支master
,BranchA
,BranchB
和BranchC
。使用Git,我該如何記錄兩個特定分支之間合併提交的所有提交?
現在所有這些分支已合併爲主,可能多次(無論出於何種原因,這是一個假設情景)。我希望能夠找到BranchA
合併到master
的所有合併提交。
這是據我問這個問題之前,有:
git log master ^BranchA --merges --oneline
這得到我的一切,都在master
的提交,而不是BranchA
這也是合併的提交。這實際上給了我所有提交我正在尋找,但它也可以給我我不想要的承諾,如從BranchB
和BranchC
併入主。
輸出示例:
10bdc8b Merge branch 'BranchA'
383693a Merge branch 'BranchB'
8af3b5c Merge branch 'master' of 192.168.0.0:/path/to/repo.git
aa0f22c Merge branch 'master' into BranchC
72bbf3a Merge branch 'BranchA'
fac1157 Merge branch 'BranchB'
我想找到輸出只是10bdc8b
和72bbf3a
的溶液。並且不要只想到'BranchA'這個名字;我知道在這種情況下會起作用,但合併提交總是可能會被賦予一個自定義消息,所以它可能不總是有效。
編輯
良好的反應,到目前爲止,但不幸的是,我已經碰了壁,我不知道怎麼弄過去。考慮以下情況:
F <-BranchB
/\
/ \
A-----B----C-----D--E----K----L <-master
\ / \ /
\ / \ /
G----H--------I---J <-BranchA
現在,我的目標是從BranchA找到所有合併提交到主。通過查看圖表,我可以看到我在尋找L
和D
。然而,讓我無法以編程方式解決這個問題的曲線球是合併提交I
,其中master被合併到BranchA中。
在這種情況下,如果我們用在主所有提交的branch --contains
方法,我們得到了L
,D
和B
。但是,如果我們對master中的所有提交進行分支 - 而不是BranchA,則只能得到L
。這兩種方法都得不到理想的結果。
同樣,如果我們使用git merge-base
找到父項,我們只能得到L
。
據我所知,似乎沒有一種好的方法來區分B
和D
,因爲這兩個提交都在BranchA的歷史中。我可以通過觀察他們發現他們是不同的,但Git似乎沒有很好的方法來區分他們。
我有時無法保持git merge-base的正確性,但在這種情況下,git mergebase B是否等於是我們正在嘗試做的事情? –
jacobhyphenated