2012-03-14 11 views
1

私はローカルブランチbranch_aで変更を行っています。私はこれらの変更がマスターに統合される必要があると思ったので、私は自分のローカルマスターに合併しました。私はその後、branch_aで作業を続けました。時折、他のpplからの最新のアップデートを自分のローカルマスターに引き込み、それらをbranch_aにマージしました。ローカルブランチで前後にマージしているときにgit resetをmasterで使用する

これで、masterのbranch_aからの変更を望んでいないことが分かりました。数ヶ月前に元の状態に戻すにはどうすればよいですか(branch_aからのマージの結果はコミットされていますが、プッシュされません)。私のローカルブランチbranch_aはマスターからのマージのために依存しているのでリセットできません(リモートマスターブランチからの変更だけが必要ですが、私はローカルマスターには何もありません。とにかく - 他のブランチをマージしてうまく動作するようになった後はちょっとしたことです)。 branch_aをrebaseして、ローカルのmasterブランチの依存関係を削除してからリセットすることはできますか?または、履歴を削除しないように元に戻す必要がありますか? (基本的には、マージした後、ローカルマージと小さなフィックスでマスタが乱雑になりたくない)。

答えて

1

これは、さまざまな方法で実行できます。もちろん、マスターブランチをリセットすることもできます。あなたはできるマスターにあなたのマージされたbranch_aを取り除くために:

あなたがマージされたbranch_aが、これはbranch_aからの変更を剥奪され、現在のリモート・マスターにマスターポイントを行います変更押されたhaventので
git fetch origin 
git checkout master 
git reset --hard origin/master 

ここで、branch_aを残したいがmasterからのマ​​ージされた変更がないと仮定すると、そのブランチを対話的にリベースして、単純にマージコミットを削除することができます。

git checkout branch_a 
git rebase -i HEAD~20 (assuming 20 commits back in history) 

これは、さまざまなことを行うことができますし、このようなものになりますエディタが起動します:

pick 23kasjd foo 
pick sjd3456 goo 

単にマスターからのコミットをマージし、保存されている行を削除します。 rebaseは続行され、branch_aの履歴が書き換えられ、履歴からこれらのコミットが省略されます。

+0

でも、branch_aをそのまま、つまり私がマージしたものをmasterから保持したいのであれば、どうしたらいいですか?(これはローカルのマスターに最新のアップデートを引き込み、これらをマージしたものですbranch_a)。何も削除せずにbranch_aをリベースするだけでいいですか?また、私のmasterブランチを乱す前にbranch_aをrebaseする必要がありますか?ありがとう – astrogirl

+0

あなたがそれをつぶす前にマスターの上にbranch_aをリベースすることは良いアイデアかもしれません。 – ralphtheninja