2012-05-09 20 views
8

如何找到兩個分支之間的前一個合併提交?如何查找以前的合併提交

我想看看自上次將發佈分支合併到主分支後,主分支中的更改。要查看最後一個分支以來發布分支中的更改,就像git diff ...release

但顯然git diff release...不起作用,因爲它還包含上次合併之前的所有更改。因此,我想我需要的最後一個合併的提交ID將它傳遞給git diff

git log --reverse --ancestry-path `git merge-base HEAD release`.. \ 
     --format=format:%H|head -n1 

似乎工作,可與git diff $(...)使用,但似乎非常複雜。有更簡單的解決方案嗎?

I 
/\ 
A1 B1 
\ | 
| M 
| | 
A2 B2 

這裏I是初始提交。 A[12]是發佈提交,B[12]是主提交。 M是以前的提交。在這個例子中,最後一個合併和主控之間的變化就是B2引入的變化。 git merge-base A2 B2返回A 1.和git diff B2 A1包括B1的更改。因此,問題是如何在一般更復雜的情況下找到M,以便人們可以運行git diff M B2而無需手動查找M

+0

這不是最有效的方法,但您可以查看'git log --graph --oneline'來查找提交。 – Shahbaz

回答

-1

這將顯示分支foo和分支主之間的最新合併提交

git log foo master --oneline --date-order --merges -1 

--oneline is just to keep the output short 
--date-order to get the latest first 
--merges to only show merge commits 
-1 to display the first result only 
+3

這個命令似乎給了我在任一分支的最後一次合併。這包括將master或foo與其他內容合併。但是我希望將foo和主人合併,而不是與其他人合併。 –

+0

如果你只記錄一個分支,這個命令對於從一個分支得到最後的合併很有用:git log master --oneline [...] –

6

好像你正在尋找的是在這兩個分支開始不同,兩者之間不是最後合併點分支機構。這兩個概念是不同的,因爲您的發佈分支可能在合併後的一段時間內被快速轉發。

git merge-base master release將會找到主分支和分支分支的最近的共同祖先(即兩者共同的最後一個分支)。

然後,在主人上,您可以使用git diff [common ancestor] HEAD來查看自共同祖先以來對主人所做的更改。

+0

我已經添加了一個示例來說明爲什麼'git merge-base'本身並沒有解決問題。 –

+0

@羅蘭舒爾茨我明白了。我會試着想出一個不同的答案 –