Gitを使い始めるとどうしても避けて通れないのが、コンフリクトです。
特にGitを使い慣れていない方は、コンフリクトの対処をする際に焦ってしまうことも少なくないと思います。
そこで今回は、コンフリクトが起きるであろういくつかの場面に分けて、コンフリクトを対処する方法をまとめたいと思います。

情報に誤りや不足がある場合、またよりよい方法などがございましたら、コメントをいただけると大変助かります。随時修正していきたいと思います。

git pullをしたときに起きるコンフリクトの場合

  1. ターミナルに表示されるboth modifiedのファイルのコンフリクトを解消します。
  2. git addコマンドで、コンフリクトを解消したファイルをステージングに追加します。
  3. git commitコマンドで、コンフリクトを解消したファイルをコミットします。コミットメッセージにはコンフリクトを解消した旨を記載すると、後々コミットログで追ったときにわかりやすいです。

このコンフリクトを対処すると、マージコミットが作成されます。
なので、3.のgit commitの際にはコミットメッセージを記載しておくと、後々コミットログから確認する際に、見つけやすいです。

git pull --rebaseをしたときに起きるコンフリクトの場合

  1. ターミナルに表示されるboth modifiedのファイルのコンフリクトを解消します。このとき、git pull --rebaseは実行途中状態となる。
  2. git addコマンドで、コンフリクトを解消したファイルをステージングに追加します。
  3. git rebase --continueコマンドで、実行途中であったgit pull --rebaseを実行します。

このコンフリクトを対処すると、マージコミットが作成されません。なので、コミットログにも残りません。

GitLabのMergeRequestで起きるコンフリクトの場合

GitLabのMergeRequestにてコンフリクトが起きている場合、Mergeができないと思います。その際、どのように対応すればいいのかを記載します。
以下は、マージ元がhogeで、マージ先をmasterとして説明いたします。(from hoge into master)

あらかじめローカルでコンフリクトを解消する方法

※以下の2.4.6.の括弧は各チームなどの運用に合わせてオプションをつけて実行してください。

  1. git checkout masterコマンドで、ローカルのmasterブランチ(マージ先)に切り替えます。
  2. git pull (-rebase)コマンドで、ローカルのmasterブランチ(マージ先)をリモートの最新の情報にします。
  3. git checkout hogeコマンドで、ローカルのhogeブランチ(マージ元)に切り替えます。
  4. git pull (-rebase)コマンドで、ローカルのhogeブランチ(マージ元)をリモートの最新の情報にします。
  5. git merge master(--no-ff)コマンドでhogeブランチ(マージ元)にmasterブランチ(マージ先)を取り込み、ローカルにてコンフリクトを起こします。
  6. ターミナルに表示されるboth modifiedのファイルのコンフリクトを解消します。
  7. git addコマンドで、コンフリクトを解消したファイルをステージングに追加します。
  8. git commitコマンドで、コンフリクトを解消したファイルをコミットします。コミットメッセージにはコンフリクトを解消した旨を記載すると、後々コミットログで追ったときにわかりやすいです。
  9. git pushコマンドで、ローカルでコンフリクトを解消した内容をリモートブランチに反映させます。このコマンドを実行した後にGitLabのMergeRequestを確認すると、MergeRequestをMergeできるのが確認できると思います。

※私は普段GitLabを使用しているため、GitHubについて詳しくありません。GitHubのPullRequestで起きるコンフリクトもこの方法で解消できるのでしょうか。どなたかご存知の方はコメントをいただけると、大変嬉しいです。

Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.