删除历史中合并的分支?

Removing branch merged in history?

如何删除我过去合并到 master 的分支?

来自类似 :

master
... a---> b ---> c ---------> d -----> e ---> f ---> g ---> h
                  \                   /
                    x ---> y ------> z
                     branch1

至:

... a---> b ---> c ---------> d -----> f ---> g ---> h
                  \                
                    x ---> y ---> z
                     branch1

我想 undo/remove 将一个分支合并到我之前做过的 master 中。


我尝试过类似的方法,但遇到了冲突。可能吗?

# currently we are in <h> commit in master branch
git checkout master   

# new temporary branch
git branch tmp_master 

git checkout tmp_master

# reseting temp. branch to reqd. commit
git reset <d> --hard  

# cherry-picking subsequent commits
git cherry-pick <f>..<h> 

完成后——正如我预期的那样:

# change temp. branch to master branch
git branch -D master

git branch -m master

您需要:

  • rebase --interactive(这将允许您删除“e”,合并提交),
  • git revert -m 1 e(参见“Undoing Merges ”),这会创建一个新的提交,取消合并引入的更改。

第二个解决方案允许简单的推送(您正在推送新的提交),而第一个解决方案需要 push --force(如果多个用户在同一个远程仓库上进行协作,就会出现问题)

git rebase --onto d e 将从 h 的分支历史记录中删除 e。有关详细信息,请参阅 here