2016-09-15 26 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

Seconded。マスターのインタラクティブなrebaseを行い、deleteは 'e'をコミットします。 「branch1」と同値。 –

+0

同様の状況についてこの質問をチェックしてください:http://stackoverflow.com/questions/17577409/git-remove-merge-commit-from-history – alexbclay

答えて

1

git rebase --onto d e意志を必要としながら、第2の解決策は、単純なプッシュ(新しいコミットを推進している)を可能にしますブランチヒストリhからeを削除します。詳細については、hereを参照してください。

+0

コミットの数が増えるにつれ、競合と 'rebase --continue'を解決すると、次のコミットの競合が表示されます。私は各ステップで同じ矛盾を処理する必要がありますか? – maan81

+1

後続のコミットが 'e'で削除されたものに依存する場合は、私が知っている限り個別に修正する必要があります。しかし、他の誰かがもっと速い方法を知っているかもしれません(私は自分自身に興味があるでしょう!)。 – kfb

1

あなたはどちらかに必要があります。

あなたが " e" をドロップすることが可能になる
  • rebase --interactive(、マージコミット)、
  • またはgit revert -m 1 e(「Undoing Merges」を参照)。マージによって導入された変更。

最初の溶液はpush --force(同じリモートリポジトリに共同複数のユーザーの場合に問題)

関連する問題