一、git merge(分支合并的冲突时如何产生的?)
- merge分支合并时,两个commit的1、2及他们的共同祖先0;
- merge合并时,分别计算commit0和1的区别diff1,及commit0和2的区别diff2
- diff记录修改的起始行号和修改范围,如果diff1和diff2修改发生重叠,就发生了冲突
二、git revert和git reset的却别
- git revert是对回退的commit做一个相反的提交,HEAD会继续向前移动 git
- reset是回退到某一个历史的commit,HEAD会回退到指定的commit,HEAD之后的commit会被丢弃
三、问题回顾
- B同学将master分支合并到uat分支,误带了A同学的commit 1
- 码云上将uat的pr回退
- 从mastercherry-pick commit 2到uat分支
- 此时,A同学要提交commit1到uat分支发现推不上去了
问题分析:
- 相对于commit0,此时uat分支的变更diff1为删除commit1
- master合并至uat时,为删除commit1,所以当master pr至uat时提示无变更
解决:(参考附件)
- uat revert
- master cherry-pick 到uat
- uat merge到master 此时master就没有A同学的commit1了
- 从T分支将A同学commit1再次pr到master
- master pr到uat