12

私のマシンには 2 つのローカル git ブランチがあります。1 つは「v2」というブランチで、もう 1 つは「master」というブランチです。マスターがチェックアウトされ、ヘッド ブランチである間に、v2 をマスターにマージしています。

「v2」ブランチを「master」ブランチにマージしたいと思います。マージを実行すると、1 つずつ解決しなければならない多くの競合があります。

競合ごとに、ファイルの「マスター」ブランチ バージョンではなく、「v2」ブランチ ファイルを保持するにはどうすればよいですか?

これらのタイプの競合に対して Git Tower から提示されたオプションは次のとおりです。

  • FILENAME を手動で解決済みとしてマーク
  • FILENAME を保持して解決
  • FILENAME を削除して解決
  • FILENAME のバージョンを復元する
  • 外部アプリで開く

私の理解では、ファイルを「保持」するオプションは「v2」バージョン(マージされるもの)を保持することを意味し、ファイルを「削除」することは「v2」バージョンを追加しないことを意味しました(代わりに既存の「マスター」バージョンを保持します) )。ただし、削除オプションを使用すると、実際にはリポジトリからファイルが完全に削除されました。

これらのタイプの競合のために、ファイルの「マスター」ブランチ バージョンではなく、「v2」ブランチ ファイルを保持するにはどうすればよいですか?

4

2 に答える 2

20

Git Tower を使用している場合でも、コマンド ラインにドロップダウンして使用できます。

git checkout --theirs file.txt

ここにそれに関するいくつかのドキュメントがあります:

http://gitready.com/advanced/2009/02/25/keep-either-file-in-merge-conflicts.html

git タワーのみを使用する場合は、そのままマージを完了してから、そのファイルの他のブランチのバージョンをチェックアウトします。可能であれば、修正を加えてステージングおよびコミットします。

Git は、コマンド ライン ツールとして開発されました。これまでに使用した他のすべてのツールでは、常に機能にギャップがありました。私は、Git の設計と戦うのではなく、受け入れることを選びました。

また、質問に記載されているように、Beyond Compare などを接続して「外部ツール」を選択することもできます。そこでは、「彼ら」側を選択するオプションがあります。

于 2012-12-14T19:59:41.100 に答える
7

v2 を維持したい場合 (マスターを v2 とまったく同じように見せたい)、最も簡単な方法は次のとおりだと思います。

  • マージしたいブランチをチェックアウトします
  • oursストラテジーを使用して master をブランチにマージします
  • チェックアウトマスター
  • ブランチをマージする

次のようになります。

git checkout v2
git merge -s ours master
git checkout master
git merge v2

このタイプの解決を競合でのみ発生させたい場合は、次のようにします。

git checkout master
git merge -s recursive -Xtheirs v2

マージ戦略については、こちらの git ドキュメントを参照してください。

UPDATE : 残念ながら、Git Tower はまだこれを行う方法を公開していないと思います。:-(

于 2012-12-15T09:00:38.813 に答える