来自云龙湖轮廓分明的月亮 发表于 2025-4-12 01:10:18

git如何把多个commit合成一个

在 Git 中,如果你想把多个提交(commit)归并成一个,可以使用 git rebase 或 git reset 来完成。下面是两种常用方法:
方法一:使用 git rebase(推荐)

git rebase 是归并多个提交为一个提交的最常见方法。以下是详细步骤:

[*] 打开 Git 终端,进入你的 Git 堆栈目次。
[*] 执行交互式 rebase:假设你要归并最近的 n 个提交,运行以下下令:
git rebase -i HEAD~n
其中,n 是你想要归并的提交数目。例如,如果你想归并最近的 3 次提交,下令应该是:
git rebase -i HEAD~3

[*] 选择要归并的提交:运行这个下令后,Git 会打开一个文本编辑器,显示最近 n 次提交,格式如下:
pick a1b2c3d Commit message 1
pick d4e5f6g Commit message 2
pick h7i8j9k Commit message 3


[*]pick 表示保留该提交。
[*]你需要将除了第一个提交以外的全部 pick 改为 squash 或 s。例如,归并最近的三个提交:
pick a1b2c3d Commit message 1
squash d4e5f6g Commit message 2
squash h7i8j9k Commit message 3

[*] 保存并退出编辑器:保存文件并退出编辑器(通常是 :wq 对于 Vim 编辑器)。
[*] 编辑归并后的提交信息:接下来,Git 会打开另一个编辑器,让你归并多个提交信息。你可以选择保留某些信息,删除不需要的部分,然后保存退出。
[*] 完成 rebase:保存并退出后,Git 会自动归并这些提交为一个。
[*] 推送到长途堆栈(如果需要):如果你已经将这些提交推送到长途堆栈,你需要使用 --force 参数来推送:
git push --force

注意:逼迫推送会覆盖长途堆栈的汗青,以是如果其他人也在基于这些提交工作,可能会导致冲突。
方法二:使用 git reset(实用于尚未推送的提交)

如果这些提交尚未推送到长途堆栈,你也可以使用 git reset 来回到某个提交,并将背面的提交归并成一个新的提交。

[*] 软重置到指定提交:首先,使用 git reset 回到你想要归并的基准提交。假设你要归并最近的 3 次提交,可以执行:
git reset --soft HEAD~3
这会将工作区和暂存区的文件保留,但回退到上一个提交。
[*] 创建一个新的提交:现在你可以将这些更改作为一个新的提交。执行:
git commit --amend
大概:
git commit -m "合并后的新提交信息"

[*] 推送到长途堆栈(如果需要):如果之前已经推送过,你也需要逼迫推送:
git push --force


结论



[*]git rebase 是最常用的方法,实用于你需要保留提交汗青的场景。
[*]git reset 实用于你想要回退到某个点并重新整理提交的环境,尤其在尚未推送时。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: git如何把多个commit合成一个