【Git】コンフリクトメッセージを読み解く

Git

こんにちは!

Gitを使っていると、コンフリクトが起きることがよくありますよね。

筆者も先日コンフリクトが起きてしまったのですが、コンフリクトメッセージの意味をいまいち理解できていなかったため、この機会に学習してみました。

コンフリクトメッセージの意味がわかると、具体的にどのような理由でコンフリクトが起きているのかがパッとわかるようになります。

そこで、今回はGitのコンフリクトメッセージに関して、解説していこうと思います。

読者
読者

「gitでコンフリクトが起きた時のメッセージの意味がわからない…」

「なんでコンフリクトが起きたのかがわからない…」

このようにお考えの方には参考になるかと思います。

それでは、早速みていきましょう!

コンフリクトメッセージ

コンフリクトメッセージとは、コンフリクトが起きた際にターミナルに出力されるメッセージのことです。

コンフリクトメッセージの種類によって、コンフリクトを解消するためにどのような対応を行わなければならないのかや、なぜコンフリクトが起きたのかなどを知ることができます。

修正が必要かもしれないもの

まずは修正が必要かもしれないメッセージからみていきます。

UU(both modified)

これが一番あるあるだと思います。

これは、3wayマージした結果、コンフリクトが起きた際に出力されるメッセージです。

この場合の対処法としては、「コンフリクトしているファイルを修正してからマージする」です。

AA(both added)

マージされるブランチ(HEAD)にあるファイルと、マージするブランチにあるファイルをマージした結果、変更箇所がコンフリクトしているファイルがあった場合に出力されます。

こちらも、UU(both modified)とほぼ同じですね。

対処法としては、「コンフリクトしているファイルを修正してからマージする」です。

UD(deleted by them)

マージされるブランチ(HEAD)にあるファイルが、マージするブランチでは削除されているファイルがある場合に出力されます。

例えば、masterブランチにマージする場合を考えると、

  • masterブランチにはAファイルがある
  • 作業ブランチではAファイルを削除している

というような場合です。

この場合の対処法は、「対象ファイルを削除するか、残すか選択する」になります。

DU(deleted by us)

マージするブランチに存在するファイルが、マージされるブランチ(HEAD)では削除されているファイル。

UD(deleted by them)の場合とは逆のパターンですね。

例えば、masterブランチにマージする場合を考えると、

  • masterブランチではAファイルが削除されている
  • 作業ブランチにはAファイルがある

というような場合ですね。

これもUD(deleted by them)と同じく、対処法は「対象ファイルを削除するか、残すか選択する」になります。

修正が不要なもの

一応、修正が不要なものについてもみてみます。

AU(added by us)

マージされるブランチ(HEAD)にのみ存在するファイルがある場合。

これは自動的にステージングされます。

UA(added by them)

マージするブランチにのみ存在するファイルがある場合。

こちらも自動的にステージングされます。

DD(both deleted)

マージされるブランチ(HEAD)および、マージするブランチから削除されたファイルがある場合。

これは自動的に削除されます。

マージの種類

ここで、3wayマージなど知らない方もいるかと思いますので、マージにはどのような種類があるのかをご紹介していきたいと思います。

3wayマージ

3wayマージとは、例えば以下のようなケースで発生します。

  • Aさんがmasterブランチから作業ブランチを切って開発を行う
  • Bさんがその間にmasterブランチから別の作業ブランチを切ってマージを行う
  • Aさんがmasterブランチにマージする

→この時のAさんのマージが3wayマージとなります。

自分がマージする前に、既に誰かが別のブランチをマージしていたケースですね。

この場合、AさんとBさんが同じファイルを編集していれば、コンフリクトが起きる可能性があります。

ちなみに、この3wayマージは「Non-Fast-forwardマージ」と呼ばれることもあります。

Fast-forwardマージ

こちらは通常のマージと考えてください。

先頭にあるコミットをそのまま次のコミットに進めるマージのことを「Fast-forwardマージ」と言います。

rebase

コミット履歴を変更して、再構成するコマンドらしいです。

ただ、rebaseはかなりリスクの高いマージらしく、筆者は一度も使ったことがありません。

そのため、そこまで深くは知りません(スミマセン。

それでは、今回はここまでです。

ありがとうございました!

コメント

タイトルとURLをコピーしました