场景:在git中有每个(活动)版本的分支,
顺序是:
Jane必须从共享中获取R2并在她可以推送之前处理合并.但是,她不知道如何处理鲍勃的变化.
分支:R1,R2
State of Shared Repository
C1 - Bob
|
C2-+ - Jane
| |
| C3 - George
| |
| C4
C5 | - Bob
| |
C6 | - Jane [R1]
|
C7 - Alice [R2]
Run Code Online (Sandbox Code Playgroud)
Bob和Jane对R1进行了更改
然后,Jane想要将R1合并到R2中以更新最新版本.她解决了由她的变化引起的合并冲突,但她不知道如何解决鲍勃所做的变化引起的冲突.
有没有办法让Jane使用git并让Bob完成合并?
我理所当然地知道,Bob已经将他的更改合并到了R2中,但是假设情况并非如此.
可能的解决方法(寻找更好的东西)
假设Bob被阻止而Jane急于推动这个问题,Jane会尽最大努力进行合并.
$ git fetch $ git checkout R2 $ git merge --ff-only origin/R2 $ git checkout -b wip/R2-with-R1
以上wip代表正在进行中的工作,并且是一项向团队发出信号,表明树木和历史会发生根本变化的惯例.也许Jane真的希望Bob在将它们集成到基线之前查看影响他的R1代码的分辨率.(注意:这是一种反模式;更好的方法是使用自动化测试来保护R1中新代码的所需行为,并允许Bob以外的开发人员自信地合并.)
简是她合并的最佳尝试.
$ git merge origin/R1 $ hack $ git add .. $ hack $ git add ..
wip/R2-with-R1分支甚至可以包含多个检查点样式的提交.每个包含的另一个好信号会让团队知道它是推测性的.
$ git commit -m 'FIXME: fix conflicts in Potrzebie'
当她准备让鲍勃看着它时,她会把它推到一个他们都可以看到的存储库
$ git push --set-upstream origin wip/R2-with-R1
--set-upstream如果他们需要在新分支上协同工作,则可以使用该选项.
然后她启动了她的邮件用户代理.
To: Bob From: Jane Subject: speculative merge: wip/R2-with-R1 Bob: please look over my attempted merge in the subject branch and make any necessary fixes that I may have overlooked. I am particularly concerned about my Potrzebie conflict-resolutions. Changes there always seem to bite us one way or the other. Thanks, Jane
在鲍勃修复和获取之后,历史将类似
$ git lola * 77d472c (origin/wip/R2-with-R1) fix by Bob * ba1eb24 (HEAD, wip/R2-with-R1) FIXME: merge 2 * 80c207d FIXME: merge 1 |\ | * 2cf6ad4 (origin/R1, R1) R1 #2 * | 137b39d (origin/R2, R2) R2 #2 * | cb9a761 R2 ...
此时,Jane希望保留合并但不想保留丑陋的检查点提交.回到合并提交只需要一点点关注.
$ echo Merge R1 into 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
Switched to branch 'R2'
$ git merge --ff-only 84b177c498bc635612b66932f3d41096999e6d3f
Updating 137b39d..84b177c
Fast-forward
...
这留下了历史
$ git lola * 84b177c (HEAD, R2) Merge R1 into R2 |\ | | * 77d472c (origin/wip/R2-with-R1) fix by Bob | | * ba1eb24 FIXME: merge 2 | | * 80c207d (wip/R2-with-R1) FIXME: merge 1 | | |\ | |/ / | | / | |/ |/| * | 2cf6ad4 (origin/R1, R1) R1 #2 | * 137b39d (origin/R2) R2 #2 | * cb9a761 R2 ...
和R2现在通过构建与Bob的最终树相同的树.
| 归档时间: |
|
| 查看次数: |
1387 次 |
| 最近记录: |