假设 Bob 被阻止并且 Jane 急于解决问题,Jane 会尽最大努力执行合并。
$ git 获取
$ git checkout R2
$ git merge --ff-only origin/R2
$ git checkout -b wip/R2-with-R1
以上 wip 代表正在进行的工作,是一种约定,向团队表明树和历史将发生根本变化。也许 Jane 真的希望 Bob 在将它们集成到基线之前查看影响 R1 代码的她的决议。(注意:这是一种反模式;更好的方法是使用自动化测试来保护 R1 中新代码的预期行为,并允许 Bob 以外的开发人员自信地合并。)
简在合并方面做出了最大的尝试。
$ git 合并原点/R1
$黑客
$ 混帐添加 ..
$ hack
$ git add ..
wip/R2-with-R1 分支甚至可能包含多个检查点样式的提交。每个包含的另一个好信号会让团队知道它是投机的。
$ git commit -m 'FIXME:修复 Potrzebie 中的冲突'
当她准备好让 Bob 查看它时,她会将其推送到他们都可以看到的存储库
$ git push --set-upstream origin wip/R2-with-R1
--set-upstream
如果他们需要在新分支上协作工作,则可以选择该选项。
然后她启动了她的邮件用户代理。
致:鲍勃
来自:简
主题:投机合并:wip/R2-with-R1
Bob:请查看我在主题分支中尝试的合并并进行
我可能忽略的任何必要修复。
我特别担心我的 Potrzebie 冲突解决方案。
那里的变化似乎总是以一种或另一种方式咬我们。
谢谢,
简
在 Bob 的修复和获取之后,历史将类似于
$ 混帐萝拉
* 77d472c (origin/wip/R2-with-R1) 由 Bob 修复
* ba1eb24 (HEAD, wip/R2-with-R1) FIXME: 合并 2
* 80c207d FIXME:合并 1
|\
| * 2cf6ad4(原点/R1,R1)R1 #2
* | 137b39d(原点/R2,R2)R2 #2
* | cb9a761 R2
...
此时,Jane 想要保留合并,但不想保留丑陋的检查点提交。压缩回合并提交只需要一点小心。
$ echo 将 R1 合并到 R2 | \
git commit-tree origin/wip/R2-with-R1^{tree} \
-p $(git rev-parse origin/R1) -p $(git rev-parse origin/R2)
84b177c498bc635612b66932f3d41096999e6d3f
$ git checkout R2
切换到分支“R2”
$ git merge --ff-only 84b177c498bc635612b66932f3d41096999e6d3f
更新 137b39d..84b177c
快进
...
这留下了一段历史
$ 混帐萝拉
* 84b177c (HEAD, R2) 将 R1 合并到 R2
|\
| | * 77d472c (origin/wip/R2-with-R1) 由 Bob 修复
| | * ba1eb24 FIXME:合并 2
| | * 80c207d (wip/R2-with-R1) FIXME: 合并 1
| | |\
| |/ /
| | /
| |/
|/|
* | 2cf6ad4(原点/R1,R1)R1 #2
| * 137b39d(原点/R2)R2 #2
| * cb9a761 R2
...
R2 现在通过构建与 Bob 的最终树相同的树。