2013-03-26 100 views
1

繼Nvie的git分支模型後,爲什麼在將同一個「發佈」分支合併到兩個版本之後,爲什麼最終每個「前進」和「主」如果同一個'發佈'分支被合併到每個,不應該掌握和開發同意?Git工作流程,Nvie分支模型提前和落後

x 84a628d  (origin/develop, develop) Merge branch 'release-v3.0.1' into develop 
|\ 
| | x 2e4d60b (HEAD, v3.0.1, origin/master, master) Merge branch 'release-v3.0.1' 
| | |\ 
| | |/ 
| |/| 
| x | 716ce96 (release-v3.0.1) Version 3.0.1 
|// 
x | fe3b54d  Some more more code 
x | 3683892  Some more code 
x | 8c0b835  'develop' branch code 
|/ 
x d051b54  (v3.0) Baseline merge. Merge remote-tracking branch 'origin/master' 

$ git的日誌產地/主產地^ /開發

commit 2e4d60b7d6760b4f6b2328ab06150b020b0d279f 
Merge: d051b54 716ce96 
Author: Todd 
Date: Tue Mar 26 11:27:59 2013 -0400 

Merge branch 'release-v3.0.1' 

$ git的日誌產地/開發^產地/主

commit 84a628d96653ed196faa6387c8b208badf23aa75 
Merge: fe3b54d 716ce96 
Author: Todd 
Date: Tue Mar 26 11:31:53 2013 -0400 

Merge branch 'release-v3.0.1' into develop 

我缺少什麼?

回答

2
git log origin/master ^origin/develop 

此命令顯示所有提交可達從origin/master而不是從origin/develop

git log origin/develop ^origin/master 

此命令顯示所有從origin/develop提交可達但不能從origin/master

從這兩個以上命令的輸出似乎與您顯示的圖表保持一致。

如果您打算髮現兩個分支內容的差異,則應該使用git diff命令。

git diff origin/master..origin/develop 

如果你只想要這是不同的文件列表,你可以使用--name-status選項:

git diff --name-status origin/master..origin/develop 

在Git中,提交的SHA-1是基於父計算犯下的SHA1,提交消息,時間戳以及許多其他此類信息。儘管您已將同一個release-v3.0.1分支合併到masterdevelop中,但您已將其作爲2個不同時間點的2次獨立合併完成。這顯然不會爲兩者產生相同的提交SHA1。

你應該已經做了什麼,而不是爲下列之一:

選項1:

git checkout master: 
git merge release-v3.0.1 

git checkout develop: 
git merge master 

git checkout master 
# This would be a fast-forward merge 
git merge develop 

選項2:

git checkout develop: 
git merge release-v3.0.1 

git checkout master: 
git merge develop 

git checkout develop 
# This would be a fast-forward merge) 
git merge master 

這樣,您將結束與masterdevelop分支指向相同的c ommit。

即使您現在通過合併masterdevelop或其他方式,並在另一分支上進行快進合併,您也可以達到相同的狀態。

git checkout master 
git merge develop 

git checkout develop 
# This would be a fast-forward merge 
git merge master 
+1

Thanks Tuxdude!如果你試圖遵循Nvie的分支模型併爲開發分支的持續工作提供一個發佈分支,那麼直接合並master/development和develop/master有什麼意義? ... [一個成功的Git分支模型](http:// nvie。com/posts/a-successful-git-branching-model /) – Todd 2013-03-26 17:01:20

+0

@Todd - 你顯示的圖形如下Nvie的分支模型,但你用來找出差異的命令是不正確的。您應該使用'git diff develop..master'命令來區分2棵樹的內容,而不是僅僅使用'git log'命令檢查提交。我之所以告訴你直接合並開發和主控的原因是爲了使分支指針在發佈合併之後指向相同的提交。你如何維護分支完全取決於你;) – Tuxdude 2013-03-26 18:31:01

+0

啊......'差異'報告零差異,因爲我期待我的情況!所以......'log'提交報告和'diff'報告實體(節點,分支,版本等)之間的絕對變化!所以看起來GitHub上的'Branches'標籤報告了'日誌'的結果和合並分支之間的提交變化。不幸的是,這不是我所期望的,也不是爲那些外行人所清楚。謝謝Tuxdude! (對不起,我沒有;代表你的答案沒有代表) – Todd 2013-03-26 20:03:29