问题
在使用 Git 作为版本控制的时候,我们可能会由于各种各样的原因提交了许多临时的 commit(git add -m “xx”, 不是追加的–amend),而这些 commit 拼接起来才是完整的任务。那么我们为了避免太多的 commit 而造成版本控制的混乱,通常我们推荐将这些 commit 合并成一个。
这个情况下用rebase就可以登场了.
Rebase
Rebase 是在另一个基准提交之上重新应用提交的过程。它用于将不同分支的提交,合并到一个提交中。它是 git merge 命令的一种替代方法。
在 Git 中,术语 rebase 指的是将一系列提交移动或合并到一个新的基本提交的过程。rebase是非常有用,它可视化了分支工作流环境中的过程。
需要注意的是,最好在合并分支之前rebase。
实战
比如首先用git commit -m 'xx'
来提交三次,然后把最佳的2次合并为一次.
可以看到有三次提交,分别如图.
现在需要把下面红色部分的,就是最近的提交的2次,合并为一条commit
重点,首先执行git rebase -i HEAD~2
, 这里这个2就是最近的2次的commit
的意思,也可以用其他的放-i commit_id.
执行后看到如下弹窗,commit前面默认是pick
,对应的解释在下面,可以用全称,也可以用首字母,比如p
我这里保留3的comment,把2压缩到3, 修改如下,类似 r -2 , p -3.
很多同学这里都会报错,理论上也是会报错.的, 因为s的原理是把当前的commit融合到前一个commit,3在2后面提交的,所以会报错.
error: cannot 'squash' without a previous commit
按照提示,执行git rebase --edit-todo
然后再次git rebase --continue
, 修改comment即可 ,为了区分,我修改如下
然后ctrl+X, 然后输入Y,可以看到已经rebase,合并为一条了.
最后就可以提交到对于的分支上.
参考
https://stackoverflow.com/questions/39595034/git-cannot-squash-without-a-previous-commit-error-while-rebase