为了保持线性的历史提交,使用rebase 参考:https://www.zhihu.com/question/25072850?sort=created
https://blog.csdn.net/TTKatrina/article/details/79288238
https://www.codercto.com/a/69477.html
git pull = git fetch + git merge
git pull --rebase = git fetch + git rebase
git自带的pull=fetch+merge,这本身是由缺陷的。假如你和服务器分叉了,如果想要push的话,直接pull,会自动生成一个merge的commit。如果有人在你pull之后、push之前,又push了,那么你需要再次pull,这又会多生成一个merge的commit。这样你需要做两次fetch+merge,多生成的commit并没有意义的。【pull的次数,可能会有很多,假如上面的粗体字多次发生的话】
使用rebase的话,虽然需要做两次fetch+rebase,但是最后push的时候,不会有多余的commit。每一次rebase会生成新的commit,之前的commit,都是保留在本地的Repository里面的。后期是会被gc回收的。
在任何时候,我们都可以用git rebase —abort来终止 rebase
的行动,并且分支会回到 rebase
开始前的状态
rebase的三种常用方法:
(1)git rebase -i HEAD~4 合并最近4次的commit,这时候,会自动进入 vi
编辑模式; 退出了 vi
窗口git rebase --edit-todo;编辑完成git rebase --continue
let the user edit the list of commits to rebase
(2)git pull —-rebase 处理同一分支上的冲突(如果你能理解其实这是 git fetch&&git rebase 两个操作,并且理解远程分支和本地分支的区分的话,那么其实他跟单纯的rebase用法没什么区别,但是因为其场景不一样,所以单独拆分出来讲)
(3)git rebase master
git checkout dev =>git rebase master
其实rebase第一步是将dev分支上的所有commit保存到.git/rebase目录中;然后把dev分支更新到最新的master上;最后把保存的这些补丁应用到dev分支上
git rebase后 解决完冲突 git rebase --continue ;如果要中断用 git rebase --abort
注意:git rebase后git push不生效;主要是
可以用git push --force-with-lease
解决冲突