You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Git中能否撤销Squash操作?合并请求审批受阻求助

临时Squash推送后恢复原提交历史的可行方案

可以这么操作,但有严格的前提条件,且存在更稳妥的替代思路,具体如下:

操作可行性与前提

完全可以先squash提交并推送,之后恢复原历史,但必须保证在你squash推送后到恢复操作完成前,没有其他开发者向该分支提交代码——否则强制推送会覆盖他人修改,引发不可逆的代码丢失。

具体操作步骤

1. 先备份原分支(关键)

在本地为当前分支创建备份,避免操作失误丢失历史:

git checkout your-feature-branch
git branch your-feature-branch-backup

2. Squash提交并强制推送

将当前分支的多提交合并为一个:

# 替换N为你要合并的提交数量,比如最近3个提交就写HEAD~3,也可指定起始commit哈希
git rebase -i HEAD~N

在弹出的编辑器中,把第一个提交以外的所有pick替换为squash(或缩写s),保存退出后编辑合并后的提交信息。

完成rebase后强制推送到远程分支:

git push origin your-feature-branch --force

此时远程分支变为单个提交,维护者即可批准合并请求。

3. 合并完成后恢复原历史

等合并请求被目标分支合并后,切换回备份分支,将原历史推回远程:

git checkout your-feature-branch-backup
git push origin your-feature-branch-backup:your-feature-branch --force

之后你就可以继续在保留完整历史的分支上开发。

更稳妥的替代方案

其实GitLab的“批准时合并提交”选项本身就是为这种场景设计的:它会在合并时自动将你的分支多提交squash为单个提交并入目标分支,同时你的原分支会完整保留所有提交历史。直接和维护者沟通这一点,说明勾选该选项后不会丢失你的提交历史,大概率能解决问题,没必要手动执行squash操作。

内容的提问来源于stack exchange,提问作者Sergey Zolotarev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 21:35:00