私には「プライベート」と「パブリック」の2つのブランチがあります。私はプライベートで作業しており、定期的に「パブリック」ブランチのすべてを置き換えて、「プライベート」のファイルのクリーンコピーを作成したいと考えています。
「プライベート」の履歴を「パブリック」にしたくないので、を使用しますgit merge --squash
が、それでも手動でマージファイルを1つずつ解決します。これを行うためのより良い方法はありますか?
私には「プライベート」と「パブリック」の2つのブランチがあります。私はプライベートで作業しており、定期的に「パブリック」ブランチのすべてを置き換えて、「プライベート」のファイルのクリーンコピーを作成したいと考えています。
「プライベート」の履歴を「パブリック」にしたくないので、を使用しますgit merge --squash
が、それでも手動でマージファイルを1つずつ解決します。これを行うためのより良い方法はありますか?
おもう
git merge -X theirs private
あなたが探しているものです。もちろん--squash
、好きなように追加することもできます。
マージを押しつぶしても、コミットの両方のファイルで同じ行が変更されている場合、競合があるという事実は変わりません。
「public」ブランチのすべてを完全に破棄し、「public」の正確な状態を引き継ぐには、次のいずれかを実行できます。
ours
他のいくつかのコミットで指摘されているように、(戦略オプションではなく
)
マージ戦略
を
使用し
ます。ブランチは現在、マージ コミットを指しています。「プライベート」がマージ前のコミットを指すようにしたい場合は、実行してください:) (これは reflog を使用し、その間に「プライベート」を変更していない場合にのみこのように機能することに注意してください) )git checkout private
git merge -s ours public
git checkout public
git merge --ff-only private
git checkout private; git reset --hard private@{1}
"theirs" 側を手動でチェックアウトします:
2.a ブランチ "public" にいると仮定します (そうでない場合git checkout public
)
2.bgit merge --no-commit private
はマージ コミットを準備しますが、マージの競合があるかどうかに関係なく、コミットする前に停止し
ます 2. c git checkout -f private -- .
「プライベート」の現在の状態をチェックアウトする
2.dgit add .
競合を解決済みとしてマークする (存在する場合)
2.egit commit
マージ コミットを保存する。「public」は「private」とまったく同じ内容になります
編集:これは、Git の別のブランチのブランチを「マージ」ではなく「上書き」するにはどうすればよいですか?の逆のケースであることに注意してください。
編集 2: public の単一のコミットを非表示にする場合は--squash
、もちろん、ここでもスイッチを使用できます (それぞれステップ 1.b と 2.b)。