我关注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.
似乎来自修补程序的合并提交是不同的。
我假设遵循这个过程会保持共同的历史。我做错了什么?
答案 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
当然,对您的确切修复取决于您的历史细节。