当前位置:   article > 正文

使用git rebase合并多次commit_rebase commit

rebase commit

rebase的作用简要概括为:

可以对某一段线性提交历史进行编辑、删除、复制、粘贴;因此,合理使用rebase命令可以使我们的提交历史干净、简洁!
但是需要注意的是:

不要通过rebase对任何已经提交到公共仓库中的commit进行修改(你自己一个人玩的分支除外)

命令:

基本格式如下

git rebase -i  [startpoint]  [endpoint]
  • 1

其中-i的意思是–interactive,即弹出交互式的界面让用户编辑完成合并操作,[startpoint] [endpoint]则指定了一个编辑区间,如果不指定[endpoint],则该区间的终点默认是当前分支HEAD所指向的commit(注:该区间指定的是一个前开后闭的区间)。

查看了log日志后,可以运行以下命令:

git rebase -i f8773b6c
  • 1

或者:

git rebase -i HEAD~3 
  • 1

可以看到如下界面:
在这里插入图片描述
上面未被注释的部分列出的是我们本次rebase操作包含的所有提交,下面注释部分是git为我们提供的命令说明。每一个commit id 前面的pick表示指令类型,git 为我们提供了以下几个命令:

pick:保留该commit(缩写:p)
reword:保留该commit,但我需要修改该commit的注释(缩写:r)
edit:保留该commit, 但我要停下来修改该提交(不仅仅修改注释)(缩写:e)
squash:将该commit和前一个commit合并(缩写:s)
fixup:将该commit和前一个commit合并,但我不要保留该提交的注释信息(缩写:f)
exec:执行shell命令(缩写:x)
drop:我要丢弃该commit(缩写:d)

合并commit会用到squash,针对上面的提交可以改为:

pick 82fc74c7 
s dc6c19fb 
s f8773b6c 
  • 1
  • 2
  • 3

此时如果一切顺利,“wq” 或者 “ctrl+x" 就会进入编辑提交记录的界面,将多余的记录注释掉或者改一下,就可是再次 “wq” 或者 “ctrl+x" 保存退出了。
正常情况到这里就结束了,但总会有意外发生,如果在rebase多个提交的时候出想了冲突,合 并就终止,等待冲突解决后才能够继续。

解决冲突:

如果合并被中断,可以使用 “git status” 命令查看状态:

git status
  • 1

会打印如下信息:
在这里插入图片描述
假设这里的冲突文件是 “a.go”,可以使用vi或者其它编辑工具处理冲突,然后用 “git add” 命令标记冲突已解决:

git add a.go
  • 1

之后执行 “git rebase --continue” 继续合并提交。

git rebase --continue
  • 1

注意:如果多个提将间冲突较多,可能需要重复上面解决冲突的步骤,直至全部冲突都被解决之后,合并才会成功。

遗留问题:

如果分支在合并commit之前,已经将某些需要被合并的commit通过push命令传到了远程仓库,那么在合并commit之后,那些本应合并在一起的提交还会出现在提交日志中。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/566746
推荐阅读
相关标签
  

闽ICP备14008679号