Accept Theirs戦略を使うべき場面

Accept Theirs(取り込み元ブランチの変更の保持)が正しい選択である場面を理解します。git checkout --theirsコマンドの等価操作も学びます。

Resolution Strategies

詳細な説明

Accept Theirs戦略

「Accept Theirs」は、取り込み元ブランチのバージョンを保持し、そのコンフリクトブロックの現在のブランチの変更を破棄することを意味します。これはコマンドラインで個々のコンフリクトに対してgit checkout --theirs <file>を実行するのと同等です。

Accept Theirsを使うべき場面

取り込み元ブランチがより新しい、またはより良い実装を持っている場合:

  • 他のブランチがより最近のリファクタリングを含んでいる。
  • そのバージョンが更新されたコーディング標準に従っている。
  • 取り込み元の変更がコードレビュー済みで承認されている。

上流の変更を取り込む場合:

  • 更新されたmainに自分のfeatureブランチをリベースする場合、「theirs」バージョンはチームが合意した状態を表します。
  • オープンソースへの貢献: メンテナーのバージョンが優先されるべき。

自分の変更が不要になった場合:

  • 取り込み元ブランチが適切に修正する一時的な回避策を作った。
  • 自分の変更は他のブランチが完成させた下書きだった。

コマンドラインでのAccept Theirs

ファイル全体の場合:

git checkout --theirs path/to/file.txt
git add path/to/file.txt

マージ戦略オプションの場合:

git merge -X theirs feature-branch

重要な注意点: リベースではoursとtheirsが入れ替わる

git rebase中は、oursとtheirsの意味が逆転します。mainに自分のブランチをリベースする場合:

  • 「Ours」 = リベース先のコミット(main)
  • 「Theirs」 = リプレイされる自分のブランチのコミット

これはよくある混乱の原因です。リベースのコンテキストでは、自分の変更を保持したい場合、実際にはAccept Theirsが必要です。

Accept Theirsのリスク

  • 競合するブロックに対するブランチ固有の変更が破棄されます。
  • 取り込み元ブランチがカバーしていないエッジケースに対応していた場合、その修正が失われます。
  • 取り込み元バージョンが自分のコードが対応していたすべてのシナリオを処理することを常に確認してください。

ユースケース

featureブランチを最新のmainブランチにリベースしています。mainは大幅なリファクタリングを受けており、mainからのすべての新しいパターンを採用するため、ほとんどのコンフリクトでtheirsバージョンを受け入れます。

試してみる — Git Conflict Resolver

フルツールを開く