-
上游分支用merge,下游分支用rebase
会减少很多无意义的merge,以及保持master分支的树干净。 -
原理:凡是不能fast forward 都不能push。
不能fastforward 就会产生一次合并的提交,这次提交会将远程的终点和本地的终点合并起来作为一个新的终点。所以才有了问题3。 -
有两种情况会导致失败或者会导致一次新的无意义的merge
image.png
一种是上图这种,很奇怪,分支自己合并自己。

一种是上图,毫无意义的merge。
出现上面两种情况的原因是:
第一种是分支上的,例如dev分支,分支做的东西修改了,然后commit了,并且push到了远程分支(也就是origin dev)。 然后执行 rebase master的操作,这时候就会出现这种情况。
会在提交时提示

这时候强制提交即可。 git push --force
这种情况 可以参考此链接
第二种情况是再master分支上commit后再pull,这时候因为pull的内容在commit后的,所以需要重新生成一次commit到本地,才能让本地master 知道变化。
可以看到无意义的提交有两个parent commit的

这种情况可以看链接
链接上有张图

可以看到 合并后的E,其实他的父节点就是c和d,所以我们看到了上面父节点图的那个父级的由来了。
- 正确流程
参考链接
不涉及合并操作时,也就是只在自己分支上提交时,使用sourcetree,其他使用git,更清楚到底用了什么命令导致。
然后正确的流程:
(1)分支都commit完到自己分支,(需要备份的可以push)
git add .
git commit -m "???"
(2)然后master 拉取最新
git checkout master
git pull origin master
(3)切换到分支,git rebase master
git checkout dev_zrh
git rebase master
(4) 有冲突解决,并add ,并继续 git rebase --continue, 重复本步骤,知道所有都解决
(5) 如果不想rebase了 git rebase —abort
(6)都解决完,commit
(7)master 再拉取一遍,有更新则继续步骤3,无则git merge dev 并commit、push 到远程master
git checkout master
git pull origin master
git merge zrh_dev
git push origin master
(8)dev push 到远程dev (需要备份的使用此步骤)
网友评论