如何在夹杂同事提交的个人分支上squash自身所有提交?
仅合并个人分支中自己的提交(夹杂他人提交时)
方法一:通过Cherry-pick一次性合并所有个人提交
这个方法最直接,直接提取你所有提交的改动合并成一个新提交:
- 先基于最新的
main分支创建干净的新分支:git checkout -b my-branch-squashed main - 提取原个人分支(比如
my-branch)中所有属于你的提交,将改动应用到新分支但不自动提交:git cherry-pick -n $(git log --author="你的邮箱或用户名" --reverse my-branch --not main)说明:
--reverse确保提交按时间从早到晚应用,减少冲突概率;--not main排除已在main分支中的提交 - 所有改动应用完成后,手动提交合并后的内容:
git commit -m "你的合并提交信息(例如:Feature X 开发完成)"
方法二:交互式变基手动选择要合并的提交
如果想保留部分个人提交的拆分逻辑,仅合并重复小提交,可使用此方法:
- 先列出你在个人分支中所有自己的提交(按时间从早到晚排序):
git log --author="你的邮箱或用户名" --reverse my-branch --not main
记下列表里最早的那个提交的哈希值(比如a1b2c3) - 执行交互式变基,从该最早提交的父节点开始:
git rebase -i a1b2c3~1 - 在弹出的编辑器中:
- 保留第一个作为基础的提交(前面的
pick不动) - 把后续所有属于你的提交前的
pick改成squash(或缩写s) - 同事的提交保持
pick不变,不要修改
- 保留第一个作为基础的提交(前面的
- 保存并退出编辑器,Git会自动将你标记的提交合并到第一个提交中,同事的提交会原样保留
注意事项
- 操作前建议备份原分支(比如
git branch my-branch-backup),避免失误丢失提交 - 若遇到冲突,按Git提示解决后:方法一执行
git add .再提交;方法二执行git rebase --continue - 命令中的
my-branch替换为你的实际分支名,你的邮箱或用户名要与Git配置一致(可通过git config user.email查看)
内容的提问来源于stack exchange,提问作者Johan
相关产品推荐
相关产品推荐

