2014-01-24 82 views
4

我正在關注a success Git branching model(又名git-flow)。git - 將修補程序合併到dev和master會導致發散

我按照部分中的指導完成了一個修補程序完成修補程序分支

我創建了一個修補程序岔開

> git checkout -b hotfix upstream/master 

做了一些工作,手動把它合併進

> git checkout master 
> git merge --no-ff hotfix 

然後手動合併它放回開發

> git checkout dev 
> git merge --no-ff hotfix 

我做了一些更多的工作提交對dev。一切似乎都很好。但後來當我去dev,它不能。

> git checkout master 
> git merge --ff-only dev 
fatal: Not possible to fast-forward, aborting. 

看來這次合併提交從修補程序的區別。

我假設在這個過程中會保持一個共同的歷史。我做錯了什麼?

+0

爲什麼你想快速合併開發主人? –

+0

@alexeyten,我想避免合併提交...從[文章](http://nvie.com/posts/a-successful-git-branching-model/)*當開發分支達到穩定點,是準備發佈,所有的變化應該合併回主**以某種方式*** –

回答

4

你沒有提供有關歷史的拓撲結構細節,與一般情況下這樣開始和創建hotfix

$ git checkout -b hotfix upstream/master 
$ git lola 
* 81a514a (dev) Stupendous feature 
* cb4d5e6 Great feature 
* d4a7906 Cool feature 
| * 39e449a (HEAD, upstream/master, hotfix) v0.2 
|/ 
* 264ddbc (master) v0.1

注:git lola是一個非標準的,但非常有用的別名。

合併hotfixmaster

* 567f066 (HEAD, master) Merge branch 'hotfix' 
|\ 
| * 1b1b6e3 (hotfix) Fix nasty bug 
| * 39e449a (upstream/master) v0.2 
|/ 
| * 81a514a (dev) Stupendous feature 
| * cb4d5e6 Great feature 
| * d4a7906 Cool feature 
|/ 
* 264ddbc v0.1

合併hotfix分別向dev是那裏的東西去偏離軌道。

* 36aa1c8 (HEAD, dev) Merge branch 'hotfix' into dev 
|\ 
* | 81a514a Stupendous feature 
* | cb4d5e6 Great feature 
* | d4a7906 Cool feature 
| | * 567f066 (master) Merge branch 'hotfix' 
| | |\ 
| |//
|/|/
| |/ 
| * 1b1b6e3 (hotfix) Fix nasty bug 
| * 39e449a (upstream/master) v0.2 
|/ 
* 264ddbc v0.1

在這一點上,master不是dev,但它的兄弟的直接祖先。

增加更多的承諾到dev使master其偉大的叔叔。

* d89aa74 (HEAD, dev) Jason does it again 
* a4dd5bf Jason saves the day 
* 36aa1c8 Merge branch 'hotfix' into dev 
|\ 
* | 81a514a Stupendous feature 
* | cb4d5e6 Great feature 
* | d4a7906 Cool feature 
| | * 567f066 (master) Merge branch 'hotfix' 
| | |\ 
| |//
|/|/
| |/ 
| * 1b1b6e3 (hotfix) Fix nasty bug 
| * 39e449a (upstream/master) v0.2 
|/ 
* 264ddbc v0.1

回想dev由一個特性分支的方式獲取到master,並通過--no-ff合併。也許release-1.0從您的修補程序開始,並獲得另一個錯誤修復。

* f0398ba (HEAD, release-1.0) Bugfix for v1.0 
* d89aa74 (dev) Jason does it again 
* a4dd5bf Jason saves the day 
* 36aa1c8 Merge branch 'hotfix' into dev 
|\ 
* | 81a514a Stupendous feature 
* | cb4d5e6 Great feature 
* | d4a7906 Cool feature 
| | * 567f066 (master) Merge branch 'hotfix' 
| | |\ 
| |//
|/|/
| |/ 
| * 1b1b6e3 (hotfix) Fix nasty bug 
| * 39e449a (upstream/master) v0.2 
|/ 
* 264ddbc v0.1

假設按鈕了釋放,這可以追溯到master

$ git merge --no-ff -m "v1.0" release-1.0 
$ git lola 
* 5a384c8 (HEAD, master) v1.0 
|\ 
| * f0398ba (release-1.0) Bugfix for v1.0 
| * d89aa74 (dev) Jason does it again 
| * a4dd5bf Jason saves the day 
| * 36aa1c8 Merge branch 'hotfix' into dev 
| |\ 
| * | 81a514a Stupendous feature 
| * | cb4d5e6 Great feature 
| * | d4a7906 Cool feature 
* | | 567f066 Merge branch 'hotfix' 
|\ \ \ 
| |//
|/|/
| |/ 
| * 1b1b6e3 (hotfix) Fix nasty bug 
| * 39e449a (upstream/master) v0.2 
|/ 
* 264ddbc v0.1

當然,對於你確切的修復取決於你的歷史細節。

+0

什麼*具體*你需要?我很欣賞這個解釋,但它還沒有回答我的問題。讓我問一個新的問題,我該怎麼做? –

+0

@JasonMcCreary你可能離得很近。記住合併回'master'是'--no-ff',但你的問題試圖用'--ff-only'來完成。在完全通用的模型下,'dev'合併到'release- *'中,然後合併到'master'中。查看我答案的最後兩部分。如果仍然不能回答你的問題,考慮在你的答案中粘貼'git lola'的相關輸出。 –

+0

也許我正在做從* dev *到* master *的錯誤合併。我認爲你想在合併分支時避免合併提交。在遇到修復程序等情況時保持清晰的歷史記錄。因此,' - 只有'。你說在git-flow下我想合併提交? –

相關問題