2012-03-12 8 views
2

問題が発生しました。私はマスターについていくつかのコミットをしました。しかし、私は間違いを犯しました。私はbranch_aでこれらのコミットをする必要があります。 master上のコミットをキャンセルしてbranch_aに移動するにはどうすればよいですか。他の誰を想定していないマスターでコミットをキャンセルしてブランチに移動する方法

+0

branch_aはすでに存在しますか? masterにはbranch_aにないコミットがありますか?branch_aに移動したくないのですか? branch_aにmasterにはないコミットがありますか? –

+0

ああ、撃たれた。これは、私があなたになるならば、私はそれらの変更を元に戻して、私の機能ブランチ(あなたの場合はおそらくbranch_a)でそれをやり直してコミットすることを助けるかもしれないhttp://stackoverflow.com/questions/927358/git-undo-last-commit変更は、これが役立つことを願って、歓声 –

+0

Tats_innitはそれの権利を持っているようだ。あなたは 'git revert'と' git cherry-pick'の組み合わせをしたいと思っています。 – Borealid

答えて

2

はすでに習得する変更内容を見て、それらの上に何かを構築しています:

git checkout branch_a 
git cherry-pick <commit sha> # for each commit you want on branch a 
git checkout master 
git reset <commit sha you want to move master back to> 

誰かがあなたの偶然のマスターがコミットの上に、既に構築されたものを持っている場合は、その後'LL resetの代わりにgit revertにしてください。

2

あなたがカップルをコミットしているだけなら、チェリーを選ぶのが最も簡単なオプションかもしれません。コミットのハッシュはgit log masterで見つけることができます。次に、以下を実行します。すべてCOMMIT_HASH_#あなたがbranch_aに移動したいとCOMMIT_HASH_BEFOREがあなたの間違ったコミット前からコミットハッシュでコミットしている

git checkout branch_a 
git cherry-pick COMMIT_HASH_1 
git cherry-pick COMMIT_HASH_2 
... 
git checkout master 
git reset --hard COMMIT_HASH_BEFORE 

すでに変更をmasterにプッシュしていて、他の人がブランチで作業している可能性がある場合は、git revertとしたいことに注意してください。あなたがチェリーを選んだのと同じコミット。そうしないと、ブランチで働いている他の人に問題が発生します。 (元に戻すだけで、以前のコミットを元に戻す新しいコミットが作成されます)。

1

マスターブランチをリセットして変更を保存することをお勧めします。チェリーピックを使用すると、新しいコミットでレポが汚くなります。あなたは2つのコミット行ったと仮定:--softでリセット

git checkout master 
git reset --soft HEAD~2 
git checkout branch_a 
git commit -m "foo" 

すると、あなたの変更が上演保持されますと、あなたがコミットを作っ前にそれが見えたとして、それが状態でのgitを置くことを意味しますので、あなただけのブランチを切り替える必要があります変更を再コミットします。

関連する問題