其实我用Git不多,git rebase
命令之前也都没听说过,偶然在牛客网看面经看到有人说面试官问git rebase
和git merge
的区别。才想到去了解一下它。
廖雪峰的官方网站上有提到git rebase
的用法[1],并举了一个例子,但他的例子不好,评论里也有人说到。
评论里有位同学详细说了git rebase
的用法, 说得很好, 摘抄如下:
一开始按照教程演示去操作,因为两个目录修改的不是同一文件,git pull
后直接合并了没有冲突,所以git rebase有效果。如果git pull
后提示有冲突后,先不管冲突的代码,因为修改后执行rebase还是变回有冲突的代码。先执行git add .
和git commit -m 'xxx'
。在执行git rebase 终端提示:Resolve all conflicts manually, mark them as resolved with “git add/rm <conflicted_files>”, then run “git rebase –continue”。这时再手动修改代码解决冲突,执行git add .
再执行 git rebase --continue
就有效果了。这时直接git push
到远程仓库即可
按照廖雪峰以及那位同学的评论还有Git官网文档,我总结一下git rebase
的用法
什么时候用到git rebase
当多人在同一个分支协作时,后push的同学需要先git pull
,如果出现冲突,还要先处理合并文件,然后再push, 这时就算merge完成了,然后你通过git log --graph --pretty-oneline --abbrev-commit
查看提交历史,会发现提交历史有分叉, 初一看有点眼花缭乱的感觉。而git rebase
通过一系列操作, 可以将提交历史改为一条直线, 看起来清晰一点。
git rebase
的用法
第一种情况: 修改的不是同一个文件,执行git pull
后没有冲突,接着直接执行git rebase
就可以了。
第一种情况只需执行两条命令:
git pull
git rebase
第二种情况: 修改同一个文件, 出现冲突,这时执行git pull
后,会显示需要你手动更改冲突文件,先不要改,而是先执行git add x
和git commit -m "y"
, 然后再执行git rebase
, 然后将冲突文件里的\<\<\<\<HEAD那些无关内容删掉即可, 千万不要做其他改动,然后执行git rebase --continue
就可以了。
第二种情况需要以下6步
git pull
git add x //x是冲突文件
git commit -m "y" //y是那个什么
git rebase
将冲突文件里的<<<<HEAD那些无关内容删掉
git rebase --continue
参考:
[2] Git官方文档之分支-变基