关于git的rebase使用

1、rebase用在分支合并

1. 普通状况:html

你在main分支上,开出一个feature分支,在feature分支上工做git

image.png

某同事在main分支上push了新内容A2安全

image.png

若是想在feature分支获取到A2改动,则将main分支merge到feature分支,产生B1。这样git就记录了这个merge的信息。markdown

image.png

有时候咱们并不想要git记录这个merge的信息,由于这样会让git的历史记录变得很繁琐。并且会产生分叉。yii

回到merge前,若是将feature分支rebase到main分支,则是这样,是一条直线,没有分叉,至关清爽。rebase之后,老的提交B会被丢弃,会指向新建立的提交B‘。oop

image.png

2. 有相同commit的状况:spa

好比feature分支的第1个commit B 的改动和main分支的A2是同样的。.net

image.png

那么在执行git rebase main之后,B就直接被删除掉了。命令行

image.png

3. 在多条分支上操做的状况:code

image.png

如今想将feature1分支上的改动放到main最新改动的后面,则执行git rebase --onto main feature feature1,将变成:

image.png

实际项目中遇到的状况:在develop上修了个bug,须要把bug的分支接到release分支上:

image.png

执行git rebase --onto release develop bug:

(固然也能够切换到bug分支之后,直接执行git rebase release

image.png

2、在rebase的过程当中,git作的事情:

  1. 把feature分支里面的每一个commit取消掉。
  2. 把上面的操做临时保存成patch文件,存在.git/rebase目录下。
  3. 把feature分支更新到最新的main分支。
  4. 把上面保存的patch文件应用到feature分支上。

3、关于rebase过程当中的冲突:

  1. 在rebase的过程当中有可能产生冲突,这时候git会中止rebase并让你去解决冲突。
  2. 在解决完冲突后,用git add <filename>命令去更新这些内容。
  3. 而后执行git rebase --continue
  4. 这样git会继续应用余下的patch补丁文件。
  5. 在期间可使用git rebase —abort来中止rebase操做。回到rebase之前的状态。

4、为何说git rebase是一个危险的命令?由于它改变了历史。

image.png

若是在rebase之前,feature分支不只仅是你一我的在维护,还有其余同事在维护,那么在你将feature进行rebase并push到远程仓库之后,其余同事拉取代码就会产生问题。因此当全部须要rebase的commit没有被push过,就能够安全地进行rebase。

5、rebase用在其余方面(合并commit、删除commit、修改commit message等方面),下面用删除commit做例子:

  1. 切换到将要操做的分支
  2. 执行git rebase -i HEAD~2,进入vi窗口,查看近2个commit

image.png 3. 按键盘a键进入编辑模式 4. 根据图中提示进行操做,好比我想drop70787b8这个commit,将pick改为dimage.png 5. 按esc退出vi窗口。输入::wq保存并退出。 6. 命令行看到Successfully rebased and updated refs/heads/feature.说明70787b8这个commit被删除掉了。

6、关于rebase成功之后的操做

  • 执行完rebase之后,每每须要进行强制推送:git push -f 分支名(实际上git push -f就行啦)
  • 若是想恢复到rebase以前的记录,能够执行git reflog之后,按箭头下,往下找到你想要回到的commit,复制。
  • 再执行git reset commit_hash_id --hard,就能回到某个版本啦。

7、参考文档:

git-scm.com/book/zh/v2

git-scm.com/docs/git-re…

cloud.tencent.com/developer/n…

blog.csdn.net/gtlbtnq9mr3…

www.yiibai.com/git/git_reb…

www.liaoxuefeng.com/wiki/896043…

jartto.wang/2018/12/11/…

相关文章
相关标签/搜索