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

Azure Devops中如何撤销合并的旧提交且不丢失中间的其他提交

操作可行性说明与实现步骤

该需求完全可实现,操作过程不会丢失两次目标提交之间的所有正常提交,操作前建议先备份当前远程分支的最新快照,避免误操作。

前置准备

  • 在Visual Studio 2019中打开目标仓库,切换到被污染的目标分支,拉取最新远程代码,保证本地分支状态与远程完全同步。
  • 获取两个关键提交的哈希值:
    • 10月21日推送的合并提交哈希值(记为合并提交HASH)
    • 9月3日生成的未推送旧提交哈希值(记为旧提交HASH)
      可通过VS顶部「Git」菜单→「管理分支」→右键目标分支选择「查看历史记录」,在历史列表中找到对应提交后右键选择「复制提交哈希值」即可获取。

可选操作方案

优先选择方案1,对团队协作的影响最小;如果需要保持提交历史干净、且确认10月21日后的分支更新没有被其他成员拉取过,可选择方案2。

方案1:revert撤销变更(不修改历史,适用绝大多数场景)

revert操作会生成新的提交抵消目标提交的变更,不会改动已有的提交历史,也不会影响中间的正常提交:

  1. 打开VS内置Git命令行:顶部「Git」菜单→「打开命令提示符」
  2. 先撤销9月3日的旧提交,执行命令:git revert <旧提交HASH>,如有冲突按提示完成冲突解决后提交即可。
  3. 再撤销10月21日的合并提交,执行命令:git revert -m 1 <合并提交HASH>,其中-m 1表示保留合并的第一个父节点,即合并前远程分支的正常提交线,解决冲突后完成提交。
  4. 将本地生成的两个revert提交直接push到Azure DevOps远程仓库即可完成操作。

方案2:rebase删除提交(修改历史,适合无其他成员同步过新提交的场景)

该方案会彻底抹除两个目标提交的痕迹,保持提交历史干净:

  1. 打开VS内置Git命令行,执行命令:git rebase -i <旧提交HASH>~1
  2. 在弹出的交互编辑界面中,找到对应旧提交HASH和合并提交HASH的两行,将行开头的pick修改为drop,保存后退出编辑。
  3. 操作过程中如果出现冲突,解决冲突后执行git rebase --continue,直到rebase流程完全结束。
  4. 由于改动了分支历史,需要强制推送至远程,执行命令:git push --force-with-lease,该命令会先校验远程是否存在本地未同步的新提交,避免误覆盖其他成员的代码。

Azure DevOps权限说明

如果强制推送时提示权限不足,需要联系仓库管理员在Azure DevOps项目设置→仓库→对应仓库的「安全」配置中,为你的账号开放「强制推送(改写历史)」权限,操作完成后建议及时收回该权限避免后续误操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 10:36:04