2016-04-08 3 views
0

feature-branch - > release-branchをマージしています。Git:不正なプッシュから回復し、同じマージ戦略を維持するにはどうすればいいですか?

私たちは誤って機能ブランチの代わりにリリースブランチにコミットをプッシュしました。

コミットをfeature-branchとout-of-release-branchに移動するにはどうすればいいのでしょうか?同時に、feature-branchを変更し、最終的にすべてをリリースブランチにマージすることができますか?

git checkout feature-branch 
git merge release-branch 
git checkout release-branch 
git reset --hard HEAD~1 

をしかし、どのように変化し、リリースブランチに、元のコミットや変更をプルダウン分岐を解放するために分岐を特長としており、その後ダウンマージを行うにはを行うことができます。

私たちは何ができますか?

これを行うことはできますか?

git checkout feature-branch 
//Make changes to feature-branch 
git checkout release-branch 
git merge feature-branch 
+0

リリースブランチをダイレクトプッシュから保護する必要があります。私が知っているそれぞれのgitホスティングプロバイダは、これらのブランチポリシーを設定できます。 – rubenvb

+0

が注目されました:)次回.... –

+0

[Gitを使って最新のコミットを新しいブランチに移動]の可能な複製(http://stackoverflow.com/questions/1628563/move-the-most-recent -commit-to-a-new-branch-with-git) –

答えて

4

確かに実行できますが、コミットを「プッシュ」したので、ローカルリポジトリに影響があるだけではありません。したがって、git reset --hard HEAD~1の後に、git push --forceを実行して、非リリースのアップデートをリモートリリースブランチにプッシュする必要があります。

同様に間違っては自分のローカルリポジトリにすでにリリースブランチのコミットを引っ張っすべての開発者が(originは、リモートの名前に置き換えする必要があるのに対し、)それは新しいリモート状態に設定を取得しgit reset --merge origin/release-branchをしなければなりません。

+0

git pullに '--force'はありませんが、OPが破棄したいコミットを拾った人は、それらを破棄するためのアクション、通常はリセットまたはリベース。 (彼らはgitのドキュメンテーションの "上流のrebaseからの回復"のセクションを見てください) – torek

+0

@torek私は誰もコミットを拾ったとは思わない。しかし、彼らはどのような行動を取る必要がありますか?彼らが 'プッシュフォース'の後でリモートに同期すれば、彼らのブランチはどのように見えますか? –

+0

@david最後にfeature-branchをrelease-branchにマージするとどうなりますか?そのマージは動作し、リリースブランチで一度リセットされた変更を含めますか? –

0

あなたが物事を単純にしたいのであれば、cherryはrelease-branchからfeature-branchへのコミットを選んで、release-branchでコミットを元に戻してください。あなたは歴史には何もしていません - 単純なバニラgitコマンドです。

+0

この場合、フィーチャブランチをリリースブランチにマージするときに、元に戻す必要があります。可能であれば、私はリセットがより簡単できれいな解決策であることを知ります。 –

+0

@David Ongaroはい、あなたの答えは良いです。私が試みる最初のことは、特定のコミットへのハードリセットです。私はすぐに答えました。 –

関連する問題