git rebase的使用

为了保持线性的历史提交,使用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

https://stackoverflow.com/questions/8939977/git-push-rejected-after-feature-branch-rebase?r=SearchResults#

  解决冲突

原文地址:https://www.cnblogs.com/little-ab/p/11397775.html