我正在遵循一个成功的 Git 分支模型(又名 git-flow)。
我按照完成修补程序分支部分中的指导进行了修补程序。
我创建了一个来自master 的修补程序分支:
> git checkout -b hotfix upstream/master
Run Code Online (Sandbox Code Playgroud)
做了一些工作并手动将其合并到master中:
> git checkout master
> git merge --no-ff hotfix
Run Code Online (Sandbox Code Playgroud)
然后手动将其合并回dev:
> git checkout dev
> git merge --no-ff hotfix
Run Code Online (Sandbox Code Playgroud)
我对dev做了更多的工作承诺。一切看起来都很好。但是当我将dev合并到master时,它就不能了。
> git checkout master
> git merge --ff-only dev
fatal: Not possible to fast-forward, aborting.
Run Code Online (Sandbox Code Playgroud)
看来修补程序的合并提交是有区别的。
我认为遵循这个过程将保留共同的历史。我做错了什么?
您没有\xe2\x80\x99t 提供有关历史拓扑的详细信息,因此从一般情况开始并创建hotfix给出
$ git checkout -b 修补程序上游/master\n$ git lola\n* 81a514a (dev) 惊人的功能\n* cb4d5e6 很棒的功能\n* d4a7906 很酷的功能\n| * 39e449a(HEAD、上游/主、修补程序)v0.2\n|/\n* 264ddbc(主)v0.1\n\n
注意:git lola是一个非标准但非常有用的别名。
合并hotfix给master定
* 567f066 (HEAD, master) 合并分支\'hotfix\'\n|\\\n| * 1b1b6e3(修补程序)修复讨厌的错误\n| * 39e449a(上游/主控)v0.2\n|/\n| * 81a514a (dev) 惊人的功能\n| * cb4d5e6 很棒的功能\n| * d4a7906 很酷的功能\n|/\n* 264ddbc v0.1\n\n
hotfix单独合并dev是事情偏离轨道的地方。
* 36aa1c8 (HEAD, dev) 将分支“hotfix”合并到 dev\n|\\\n* | 81a514a 惊人的功能\n* | cb4d5e6 很棒的功能\n* | d4a7906 很酷的功能\n| | * 567f066 (master) 合并分支\'hotfix\'\n| | |\\\n| |/ /\n|/| /\n| |/\n| * 1b1b6e3(修补程序)修复讨厌的错误\n| * 39e449a(上游/主)v0.2\n|/\n* 264ddbc v0.1\n\n
此时,master它不是直系祖先,dev而是其兄弟姐妹。
添加更多承诺使其dev成为master其叔祖父。
* d89aa74 (HEAD, dev) Jason 又做了一次\n* a4dd5bf Jason 拯救了这一天\n* 36aa1c8 将分支“hotfix\”合并到 dev\n|\\\n* | 81a514a 惊人的功能\n* | cb4d5e6 很棒的功能\n* | d4a7906 很酷的功能\n| | * 567f066 (master) 合并分支\'hotfix\'\n| | |\\\n| |/ /\n|/| /\n| |/\n| * 1b1b6e3(修补程序)修复讨厌的错误\n| * 39e449a(上游/主)v0.2\n|/\n* 264ddbc v0.1\n\n
回想一下,这是通过功能分支和合并dev实现的。也许从您的修补程序开始并获得另一个错误修复。master--no-ffrelease-1.0
* f0398ba(HEAD,release-1.0)v1.0 的错误修复\n* d89aa74(开发)Jason 再次执行\n* a4dd5bf Jason 拯救了这一天\n* 36aa1c8 将分支 \'hotfix\' 合并到 dev\n|\ \\n* | 81a514a 惊人的功能\n* | cb4d5e6 很棒的功能\n* | d4a7906 很酷的功能\n| | * 567f066 (master) 合并分支\'hotfix\'\n| | |\\\n| |/ /\n|/| /\n| |/\n| * 1b1b6e3(修补程序)修复讨厌的错误\n| * 39e449a(上游/主)v0.2\n|/\n* 264ddbc v0.1\n\n
假设按下释放键,这又回到master了
$ git merge --no-ff -m "v1.0" release-1.0\n$ git lola\n* 5a384c8 (HEAD, master) v1.0\n|\\\n| * f0398ba (release-1.0) v1.0 的错误修复\n| * d89aa74 (dev) Jason 又做了一次\n| * a4dd5bf Jason 拯救了世界\n| * 36aa1c8 将分支“hotfix”合并到dev\n| |\\\n| * | 81a514a 惊人的功能\n| * | cb4d5e6 很棒的功能\n| * | d4a7906 很酷的功能\n* | | 567f066 合并分支\'hotfix\'\n|\\ \\ \\\n| |/ /\n|/| /\n| |/\n| * 1b1b6e3(修补程序)修复讨厌的错误\n| * 39e449a(上游/主)v0.2\n|/\n* 264ddbc v0.1\n\n
当然,具体的修复方法取决于您的历史记录。
\n