git

git 2 个 commit 压缩为一个 commit

rebase特别有用

Posted by 叉叉敌 on May 3, 2022

问题

在使用 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