2012-02-24 9 views
31

私はdevブランチとプロダクションブランチを持つプロジェクトを持っています。最近私はdevの機能の大きな新しいセットに取り組んでいるので、私は約2週間生産に合併していません。しかし、その間に生産時に修正が必要なバグがいくつかありました。gitでマージを強制する最良の方法は何ですか?

ほとんどの場合、私は開発者とチェリーの修正をプロダクションにすることができました。しかし、2つの支店では修正が大幅に異なるため、手作業で修正する必要があります。ポイントは、2つの支店が分かれているので、2つのブランチはかなり分かれています。

今、私はすべての開発者をプロダクションに押し込んでみたいです。分割してからコミットすることは気にせず、プロダクションをdevのように見せたいだけです。 [編集:私は生産が正確にのように見えるように分割が、しかし、分割前に履歴を書き換えたくない]私がマージしようとすると、私は修正したくない何十というコンフリクトを得るハンド。

gitでマージを強制する最良の方法は何ですか?私のプロダクションの変更を分割に戻してからdevブランチに早送りすることはできますか?

答えて

26

あなただけのマスターレポ生産ブランチにあなたのdevの枝をプッシュすることができます:あなたは、デフォルトのクローンにしている場合

git push --force upstream-remote dev:production 

upstream-remoteはちょうどoriginかもしれません。 mod'ed質問に対して更新

あなたはおそらくはい、それはあなたが何をしたいのか、多かれ少なかれだ、Gitの意味でrevertしたいがありません。

git checkout -b merge <split hash> 
git merge dev 
git push --force origin merge:production 

<分割ハッシュ>ようなものが最後に残したい生産にコミットしました。

+0

既存baseBranchであなたのnewBranchをマージします、実際に私は私が欲しかった言ったとき、私はmisspokeだと思う「まさにdevのように見えるために生産を。」私が意味していたのは、分岐が分割*以降のdev *とまったく同じに見えるようにしたいということでした。つまり、私は、分割が生産に適用されてから、すべての開発者が生産コミットについて気にせずにコミットしたいと思っています。しかし、私はあなたの解決策のように聞こえる*スプリットの前に*歴史を書き直したくありません。 –

+1

スプリット時に2つのブランチが同じでしたか?そういう感じです。もしそうなら、彼らは分裂の前に同じ歴史を持っていたので、あなたは何も失うことはありません。 – smparkes

+0

分岐履歴は同じではありませんでした。私はミスピークを続けていると思う。 2週間前にファイルはすべて同じものだったので、私はdevからプロダクションにまったくマージしました。その後、彼らは発散し始めました - それは私が分割と呼んでいたものです。しかし、2つの支店の歴史は異なります。 –

-4

これはうーん

git checkout <baseBranch> // checkout baseBranch 
git merge -s ours <newBranch> // this will simply merge newBranch in baseBranch 
git rm -rf . 
git checkout newBranch -- . 
+0

'-s ours'が既存の作業を上書きするのに注意してください。' -X ours'は、合併する相違点。'-s ours'はブランチを別のブランチと同じ状態にしますが、' -X our'は単にブランチを壊すだけではありません。私は提案された答えを修正するのではなく、重要な詳細を指摘しています。 – haleonj

関連する問題