Git分支历史清理:移除他人提交,保留自有提交并推送
仅保留自身提交的解决步骤
方法一:交互式变基(推荐)
- 更新本地master分支到最新状态:
git checkout master && git pull
- 切回你的
my_branch分支:
git checkout my_branch
- 启动交互式变基,基于最新的master分支:
git rebase -i master
此时会打开一个文本编辑器,里面列出了当前分支与master分叉后的所有提交(包括他人的5个提交和你的2个提交)。
4. 编辑提交列表:
- 保留你自己两次提交前的
pick关键字(如果想把两次提交合并成一个,可将第二个提交的pick改为squash或fixup) - 将他人提交前的
pick替换为drop,或者直接删除这些提交对应的行
- 保存并退出编辑器,Git会自动完成变基操作,此时你的分支历史就只包含自己的两次提交了。
- 由于远程分支历史已被修改,需要强制推送更新:
git push -f origin my_branch
方法二:重置分支后重新移植提交
- 先备份当前分支,防止操作失误丢失内容:
git checkout my_branch && git branch my_branch_backup
- 更新本地master分支:
git checkout master && git pull
- 基于最新的master创建新分支:
git checkout -b my_branch_temp master
- 把你自己的两次提交移植到新分支:
先通过git log my_branch_backup找到自己两次提交的哈希值,然后执行:
git cherry-pick <第一次提交哈希> <第二次提交哈希>
如果遇到冲突,解决冲突后执行git cherry-pick --continue即可。
5. 更新远程分支:
先删除旧的远程分支,再推送新分支并命名为原分支名:
git push origin --delete my_branch git push origin my_branch_temp:my_branch
之后可以整理本地分支:
git branch -D my_branch git branch -m my_branch_temp my_branch
注意事项
- 强制推送会覆盖远程分支的历史记录,如果有其他同事在
my_branch上协作,务必提前沟通,避免丢失他人的修改内容。 - 使用cherry-pick时,一定要确认选中的是你自己的提交哈希,不要误选他人的提交。
内容的提问来源于stack exchange,提问作者Raul Quinzani
相关产品推荐
相关产品推荐

