1. ホーム
  2. git

Git を使って自動マージ(automerge)を防ぐには?

2023-09-09 10:42:01

質問

Git に自動マージさせることなく、ローカルブランチを master ブランチにマージしようとしています。master にマージさせたいものを「手で選ぶ」ようにしたいのです。

Git の difftool コマンドを使うと、master ブランチに追加したいものを diff して選択することができます。しかし、マージを行うと、Git が自動マージを行うため、事前に選択したものが失われてしまいます。マージの前に変更を master にコミットすることもできますが、そうするのは不自然に思えます。

そして、Gitのmergetoolは、マージによるコンフリクトがある場合にのみ利用可能です。しかし、Gitが自動マージを行う場合、通常はコンフリクトが発生しないので、mergetoolコマンドを実行することができないのです。

更新しました。

私が達成しようとしていることは、悪い習慣であるか、あるいは単に不可能であると思い始めています。つまり、トピック ブランチをマージして、差分から必要なものだけをマージさせることです。そして、追加で、これを履歴に反映させることです。とにかく、私が投稿した質問は、Gitで実験しているときに表面化したものです。

どうすれば解決するの?

マージ処理にGitが関与しないようにし、マージされる各変更ファイルの各行を手作業で選ぼうとしているのでしょう。これは git cherry-pick . と同じではありません。 git merge --no-commit なども役に立ちません。する必要があります。

$ git checkout master
$ git difftool -t kdiff3 local-branch HEAD

の中に KDiff3 ウィンドウで、左側 ( A ) はあなたの ローカル-ブランチ で、右側( B ) はあなたの 現在のブランチ (master) .

選択する Merge | Merge Current File を選んでください(または同じタイトルのカラフルな菱形のアイコンを押してください)。

その後、各ファイルの diff と競合 (もしあれば) が表示されます。そして、左側か右側かを選択する機能があります ( A または B など)、またはその両方、あるいは手動でマージされたファイルを微調整します。

もうひとつ、あなたのワークフローにはもっと大きな問題があるようです。