Git 将多个提交合并成一个提交

868 阅读2分钟

如果你已经将多个提交(commits)推送到了远程仓库(remote),但现在想将它们合并成一个提交,怎么实现?

方法 1:使用 git rebase -i(交互式变基)

1. 查看提交历史 运行以下命令,查看你想合并的提交:

git log --oneline

假设你想合并最近的 3 个提交,比如:

abc1234 Commit message 3
def5678 Commit message 2
ghi9012 Commit message 1
jkl3456 Older commit

2. 启动交互式变基 假设你要合并 ghi9012 到 abc1234 这 3 个提交,运行:

git rebase -i jkl3456

注意:这里指定的是你想保留的最后一个提交之前的提交(jkl3456)。

或者使用 

git rebase -i HEAD~3
  • HEAD~3:表示从当前 HEAD 开始,回溯 3 个提交(包括 HEAD 本身),也就是最近的 3 个提交

3. 编辑变基指令 Git 会弹出一个编辑器,显示类似以下内容:

pick ghi9012 Commit message 1
pick def5678 Commit message 2
pick abc1234 Commit message 3

将 pick 修改为 squash(或简写为 s),除了第一个提交外:

pick ghi9012 Commit message 1
squash def5678 Commit message 2
squash abc1234 Commit message 3

保存并退出编辑器。

4. 编辑提交信息 Git 会再次弹出一个编辑器,让你编辑合并后的提交信息。你可以保留默认的合并信息,或自定义一个新的提交信息,例如:

Combine multiple commits into one

保存并退出。

5. 强制推送到远程仓库· 因为你修改了历史记录,需要使用 --force 推送:

git push --force

方法 2:使用 git reset

1. 软重置到指定提交 假设你想合并最近 3 个提交,运行:

git reset --soft jkl3456

这里 jkl3456 是你想保留的最后一个提交之前的提交。这会保留所有更改,但取消最近 3 个提交。

2. 重新提交 将所有更改合并为一个新提交:

git commit -m "Combine multiple commits into one"

3. 强制推送到远程仓库

git push --force