git 更新 commit 的内容和多个 commit 合并

场景1

有时候我们发现 commit 写的不好,想要更改当前分支最近一次的 commit 的内容,我们可以使用:

git commit --amend

场景二

既然可以更改最近一次的 commit,那可能有些人就想要在当前分支下前几次的 commit 内容进行更改或者进行 commit 合并,那我们需要怎么做呢?方法如下:(注意此操作最好是在自己维护的分支上弄,多人开发的分支就不太适合)

使用git rebase -i xxxx,这里的 i 指的是交互的意思

现在项目 commit 如下


我现在想要更改第二个 commit 的内容,那我需要知道当前要修改的 commit 的父亲的 id,也就是 init game 的 commit id 1801cf5,然后git rebase -i 1801cf5

当前是 pick,我们需要使用 reword 来更改第二个 commit 的内容

保存退出,出现

修改 commit 内容,然后退出,出现

git log —oneline 查看

成功添加.号

场景3

现在我们想要把第二个 commit 和第一个 commit 这两个连续的 commit 进行合并,我们可以这样:

同样使用git rebase -i 1801cf5,将第二个 pick 改为 s(squash),这样可以合并到上一个commit

保存退出

修改成

保存退出

git log —oneline 查看

成功合并。

场景4

现在有人又有个疑惑,如果我是相隔的 commit,但是我想将相隔的 commit 的内容进行合并,那又需怎么做呢?

还是以下面这个为例子


现在我们想将第一个 commit 的内容和第三个内容进行合并,这里你可能你比较疑惑,第三个 commit 的上一个 commit 是没有的,那怎么用 rebase 呢?我们需要记下第三个 commit 的 id,输入git rebase -i 1801cf5

目前只有两个,没有 init game 的 commit id,我们需要将这个 commit id 添加上去(我们可以不用写commit 的内容):

将相关要合并的 commit 写在一起:

保存退出。按照之前的步骤即可。