git - 将修补程序合并到dev和master中会导致分歧

时间:2014-01-24 16:05:12

标签: git branch

我关注a success Git branching model(又名git-flow)。

我按照完成修补程序分支部分中的指导做了一个修补程序。

我在 master 上创建了修补程序分支:

> git checkout -b hotfix upstream/master

有些工作并手动将其合并到 master

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

然后手动将其合并回 dev

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

我做了一些针对 dev 的工作提交。一切似乎都很好。但是当我将 dev 合并到 master 时,它就不能了。

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

似乎来自修补程序的合并提交是不同的。

我假设遵循这个过程会保持共同的历史。我做错了什么?

1 个答案:

答案 0 :(得分: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是一个非标准但非常有用的别名。

hotfix合并到master会给出

*   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

当然,对您的确切修复取决于您的历史细节。