我正在关注 a success Git branching model (又名 git-flow)。
我按照完成修补程序分支部分的指导进行了修补程序。
我在 master 之外创建了一个hotfix 分支:
> git checkout -b hotfix upstream/master
做了一些工作并手动将其 merge 到master:
> git checkout master
> git merge --no-ff hotfix
然后手动将其 merge 回dev:
> git checkout dev
> git merge --no-ff hotfix
我做了更多工作 - 针对 dev 进行了提交。一切似乎都很好。但是当我去 merge dev 到 master 时,它不能。
> git checkout master
> git merge --ff-only dev
fatal: Not possible to fast-forward, aborting.
hotfix 的 merge 提交似乎是不同之处。
我假设遵循这个过程会保持共同的历史记录。我做错了什么?
最佳答案
您没有提供有关历史拓扑结构的细节,因此从一般情况开始并创建 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
是一个非标准但非常有用的别名。
merge 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
单独 merge 到 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
通过功能分支并通过 --no-ff
merge 到达 master
。也许 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
当然,具体的解决方案取决于您的病史。
关于git - 将修补程序 merge 到 dev 和 master 中会导致分歧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21337169/