2017-07-25 29 views
0

私はgitプロジェクトを持っていて、安定版は常にmasterブランチに格納されていました。 しばらくの間、別のブランチv20でバージョン2.0で作業していました。gitブランチの内容をマスターにコピー

今私はそれをリリースし、すべてをmasterブランチにコピーすることにしました。 数多くの矛盾する変更があり、多くのファイルに手作業が必要なため、私はそれをマージしたくありません。

すべて私はちょうどv20ブランチのスナップショットを作成し、古い履歴に影響を与えずにマスタに置くことを望みます(rebaseなしで他のユーザーにも影響はありません)。すべての変更をもたらす新しいコミットがあったように見えるようにするだけです。

スタート状態:

master branch --------- v20 branch 
     |      | 
master files --------- v20 files 
     |      | 
master_history   v20_history 

ターゲット状態:

master branch --------- v20 branch 
     |      | 
    v20 files -------- v20 files 
     |      | 
master_history   v20_history 
+ commit from v20 

はそれを行うには、既存のgit方法はありますか?

+0

@DaveNewtonあなたは '-s recursive -X theirs'を意味しますか?そのようには機能しません。手作業による介入が必要な未解決の紛争がまだ残っています。それはコピーではありません。私は自分の支店の状態を正確にマスターが必要です。 – rush

+3

v20の中で 'merge -s ours master'(' -s recursive -X ours'ではなく)の場合、v20をmasterにマージしますか? – mayo

答えて

3

git merge -s theirs,which does not exist, and one of the main Git authors insists that it should not existの結果を記述しています。 (これらは私の言葉ではありません)そのリンクからの引用:

へぇ、今あなたがそこに-Xours-Xtheirs を記述する際に;-)

私はあまりにも否定的に聞こえるしないようにしようとした

を行うには、いくつかの測定値を持っていますが、実際に私は「自分のもの」がさらに悪いと思う。それはあなた は(相手側が自分のハックよりもはるかに優れ ソリューションを持っているなどの理由で)あなたが何をしたか捨てるだろうかあるが、それははるかに簡単かつきれいに はで行うことができます。

$ git reset --hard origin 

一部の人々は言うかもしれません"しかし、"合併 - そのもの "では、私がしたことを保つことができる、 "。そのリセットは、単に私がしたことを捨てているだけです。

このロジックにも欠陥があります。代わりに、次のことができます。

$ git branch i-was-stupid 
$ git reset --hard origin 

あなたが本当にあなたの失敗の記録を保持したい場合。

一つの大きな問題は、上記に比べて「原点に 廃棄をリセットしたり、失敗した歴史を脇に設定した」「彼らは-s」あなたのさらなる発展が基づいているあなたの「マスター」 歴史があなたを保つことです"-s theirs"を実行した場合、それは永遠に失敗する 失敗しました。うまくいけば、時間の経過とともに のプログラマーになり、最終的には、あなたのマスターブランチのチップの近くの世界に という価値があります。しかし、 が発生した場合、は 上流に引き込まれるようにのマスターブランチを提供できません。より広い世界はあなたの以前の にはまったく興味がありません。

あなたはGitの人々に反対し、上に行くと受け入れ答えが本当に-s theirsすべてではないことをIs there a "theirs" version of "git merge -s ours"?ノートへの回答の一部を使用して自由に感じることができます。Michael R's answer--no-commitマージ中にgit read-treeを使用してインデックスを切り替えるのは正しいです。

mayo's commentでの方法も良いですし、jthill's answer他のSO質問にも同様です。

あなたのケースは上記のものとは少し異なりますが、実際には「悪い」ブランチの名前を変更して「良い」ブランチの名前をmasterに変更してから進みます。あなたの「下流」の誰もがこの同じ名前の変更を必要とするので、考慮すべき複数の点があります。

関連する問題