2016-09-15 122 views
2

我怎么能删除我以前合并成主人的分支?删除历史中合并的分支?

从类似:

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

到:

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

我想撤销/删除一个分支合并到主我有时更早完成。


我试过类似的东西,但是我得到了冲突。可能吗 ?

# 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> 

有人做过之后--as我意料中的事:

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

git branch -m master 
+3

调查[rebasing](https://git-scm.com/docs/git-rebase) – vrwim

+1

借调。做主交互式重定位并删除提交'e'。与'branch1'同上。 –

+0

看看类似的情况下这个问题:http://stackoverflow.com/questions/17577409/git-remove-merge-commit-from-history – alexbclay

回答

1

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

+0

由于提交数量很多,因为我正在解决冲突和“重新分配 - 继续”,所以会出现下一个提交的冲突。我需要在每个步骤中处理相同的冲突吗? – maan81

+1

如果后续的提交依赖于'e'中删除的内容,那么您将不得不逐个修复它们,只要我知道。但是,其他人可能会知道更快的方式(我肯定会对自己感兴趣!)。 – kfb

1

你要么需要:

  • rebase --interactive(这将让你放弃 “e”合并提交),
  • git revert -m 1 e(参见“Undoing Merges”),它创建一个新的提交取消合并引入的更改。

第二种解决方案允许简单的推送(你正在推动新提交),而所述第一解决方案将需要一个push --force(问题在多个用户同时使用同远程回购的情况下)

相关问题