このヘージと関連するページ一覧

  • 一人でイチから始めるGIT 導入編
  • 一人でイチから始めるGIT gitignore
  • 一人でイチから始めるGIT push
  • 一人でイチから始めるGIT merge
  • 一人でイチから始めるGIT conflict

  • このページの最終更新日 2020/10/25

    一人でイチから始めるGIT conflict

     このページは一人でイチから始めるGIT mergeの続きとなります。mergeのページを見ていない方は、先にそちらのページを確認して下さい。

    1、conflictに備えてgitのconfigを変更しよう

     gitでconflictを発生させる前に、まず、「git config --global merge.conflictstyle diff3」というコマンドを実行しておきます。このコマンドを実行することで、gitで競合が発生したファイルの詳細をより細かく見ることが出来ます。また「git config --global --list」というコマンドも打って、「merge.conflictstyle=diff3」という行が表示されているかを確認します。この行が表示されていれば、正しくコマンドが実行されています。

    2、競合(conflict)を発生させてみよう

     ここでは、mergeの解説ページの「2、merge(First forward)」が終了している状態と同じ状態から、解説を進めることにします。local1もlocal2も共に「local1 first commit」「local1 second commit」という2つのコミットが存在しており、local1とlocal2の「f1.txt」ファイルは共に次のように記載されているものとします。

    - local1 second commit - 「f1.txt」ファイル
    1
    aaaaa
    2
    3
    4
    5
    

     mergeの解説ページでも説明したように、まずはconflictを発生させてみることにします。「local1」フォルダについては前のページと同様に、「f1.txt」ファイルの「3」を「b」に書き換え、「git add f1.txt」「git add commit -m "local1 third commit"」「git push origin master」とコマンドを実行します。

    - local1 third commit - 「f1.txt」ファイル
    1
    aaaaa
    2
    b
    4
    5
    

     「local2」フォルダの「f1.txt」ファイルについては先ほどとは異なり、「3」を「d」に書き換えて「git add f1.txt」「git add commit -m "local2 first commit"」とコマンドを打って、「git fetch」コマンドを実行します。

    - local2 first commit - 「f1.txt」ファイル
    1
    aaaaa
    2
    d
    4
    5
    

     ここで「local2」フォルダ内で「git log --oneline --all --graph」と打ってコミットグラフを確認してみましょう(pic.1)。ここまでのコマンドでgitのコンソールに表示されるコミットグラフの構造は、前のmergeで解説したときに表示されるコミットグラフの構造と変わりないはずです。

    - pic.1 -

     しかし「git merge origin/master」とコマンドを打ったときの動作は、前回のmergeのときと異なる挙動をします。ファイル内の同じ場所をlocal1とlocal2で同時に変更したため、自動的にgitではマージを行うことが出来ません。また、赤枠で囲んだように「(master|MERGING)」と記載されていることにも注目しておきましょう。

    - pic.2 -


     このときの「f1.txt」ファイルは次のようになっています。

    - (master|MERGING) - 「f1.txt」ファイル
    1
    aaaaa
    2
    <<<<<<< HEAD
    d
    ||||||| merged common ancestors
    3
    =======
    b
    >>>>>>> origin/master
    4
    5