假设你有一个名为 feature
的分支,它包含三个提交(A, B, C),并且你想将这三个提交压缩成一个。下面是如何做到这一点的。
首先,找出你要开始压缩的那个最早提交的哈希值。在这个例子中,我们假设 A 是最早的提交。你可以通过运行 git log
命令来查看提交历史并找到提交 A 的哈希值。
开启交互式 rebase 模式
git rebase -i <A-hash>^
这里 <A-hash>
是提交 A 的哈希值。^
符号表示该提交的前一个提交。
Squash 合并
将你希望合并的每个提交行前面的 pick
改为 squash
或 s
。第一行(最早的提交)应保留为 pick
。
# 根据rebase -i 提交目标hash值打开编辑界面
git rebase -i 71c24d47b2f68d0465c3e3defa48311c3d592036
# 接着会弹出如下界面 s -- squash ,被合并的提交 pick 改为s(squash)
pick 5c079ff120 fix
s 316e094548 fix status log
s a79cbdc0f3 脱手重复key问题修复
s df8650aa3f [feat] add hmi
s ff74bd1bf1 [feat] add curise speed
s 08bf230667 [fix] cruise_speed_limit
s 71c24d47b2 [feat]: 15s hod
s 26f7d3f83d Updated mff_aeb_config.json
保存并关闭编辑器。
Git 默认使用的编辑器可能是 Vim, Nano 或者其他的,这取决于你的系统配置。
这里以 Vim 和 Nano 为例说明如何保存并退出:
Vim :
1、在 Vim 中,按
Esc
进入命令模式2、输入
:wq
(意思是 write and quit,即保存并退出),然后按Enter
Nano:
1、按
Ctrl+O
来保存文件(你会在底部看到提示 "File Name to Write")2、然后,按
Enter
确认文件名3、最后,按
Ctrl+X
退出编辑器设置默认编辑器:
git config --global core.editor vim
如果你选择了任何提交进行压缩,Git 将再次打开一个编辑器,让你修改新的合并提交消息。这将是所有被挑选和压缩提交的提交消息的组合。
在这里,你可以整理你的提交消息,删除不需要的部分或者添加更多的细节。
保存并关闭编辑器会创建新的合并提交。
推送到远端
现在,你可以用以下命令强制推送你的更改到远程存储库:
git push origin feature --force
就这样,你已经成功地将分支 feature
的三个提交压缩为一个了!