如何从Branch-B/D2中移除Branch-A/D1的变更(Arc diff & Phabricator)
移除Branch-B中来自Branch-A的变更方案
前提说明
因为你的Branch-B已经推送到远程分支,操作时优先选择不修改历史的方案,避免影响协作的团队成员。以下分场景给出具体命令:
场景1:D1是单个独立提交
如果Branch-A上的D1对应一个单独的提交,用git revert反向生成撤销提交是最安全的方式:
- 找到D1对应的提交哈希值:可以在Branch-A执行
git log查看,或者在Branch-B执行git log --oneline快速定位该提交的哈希。 - 切换到Branch-B:
git checkout Branch-B - 撤销D1的变更:
git revert <D1的提交哈希>
执行后Git会自动生成一个新提交,把D1的所有变更反向撤销。 - 推送到远程:
git push origin Branch-B
场景2:D1是多个提交或通过合并引入的
如果D1是多个提交,或是通过合并操作引入到Branch-B的,需要找到对应的合并提交哈希:
- 查看Branch-B的提交历史,找到合并Branch-A的那个提交(执行
git log --oneline,合并提交会显示Merge ...字样)。 - 执行撤销合并命令:
git revert -m 1 <合并提交的哈希>
这里-m 1表示保留当前Branch-B的原有内容,仅撤销合并进来的Branch-A变更。 - 推送到远程:
git push origin Branch-B
风险操作(仅适合私有分支)
如果你的Branch-B是无人协作的私有分支,且允许强制推送,可以用变基改写历史:
- 切换到Branch-B:
git checkout Branch-B - 启动交互式变基:
git rebase -i <D1提交之前的那个提交哈希> - 在弹出的编辑界面中,找到D1对应的提交行,把开头的
pick改成drop,保存退出。 - 强制推送到远程:
git push -f origin Branch-B
注意:这个操作会改写远程分支历史,其他人如果已经拉取过该分支,需要重新同步,可能造成代码冲突,非必要不要用。
内容的提问来源于stack exchange,提问作者Abhishek Kokate
相关产品推荐
相关产品推荐

