如果你已经将多个提交(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