Skip to content

Git之rebase

实际的团队开发工作中,如果每个人提交的代码都很频繁,会造成提交记录非常乱,这时可以通过rebase命令合并多次提交记录。

git rebase: 将当前分支上的提交内容转移到另外一个分支顶部。

用法1 合并提交记录

例如,合并最近的两次提交记录:

shell
  git rebase -i Head~2
  git rebase -i Head~2

用法2 分支合并

git merge的时候会携带分支的各种提交信息,可能一定程度上会污染主分支。git rebase不会。

shell
git:(feature1) git rebase master|
git:(feature1) git rebase master|

做了哪些操作
首先,git 会把 feature1 分支里面的每个 commit 取消掉;
其次,把上面的操作临时保存成 patch 文件,存在 .git/rebase 目录下;
然后,把 feature1 分支更新到最新的 master 分支;
最后,把上面保存的 patch 文件应用到 feature1 分支上;

image.png

image.png

尽量保证需要合并的分支只有自己在开发,比如A、B两个人同时在开发,A执行了rebase操作,改变了提交的哈希值,B再pull的时候就会丢失提交记录。

与squash的区别

  • git squash commits 主要用于合并连续的提交,使仓库历史更简洁。
  • git rebase 主要用于重写分支的提交历史,可以合并或者重新排序提交。

需要注意的是,使用 git rebase 可能会改变提交的哈希值,因此应该谨慎使用,并且只在没有共享的分支上使用。

大量参考:
彻底搞懂 Git-Rebase - Jartto's blog