東京都府中市、渋谷区のWEB制作会社Maromaroのブログです

2018.03.26

Sasaki

SourceTreeでコンフリクト対応の仕方

こんにちは、佐々木です。

SourceTreeを使っている方、コンフリクトエラーが発生したけれど、解決を押して解決したつもりになっていませんか?
もしくは、コンフリクト発生後にソースコードが壊れてしまったことありませんか?

意外におそろかにしてしまいがちなコンフリクト発生時の対応。

運用中、コンテンツ公開前にうっかりミスしてしまうと大変な問題につながってしまいます!

それでは、対応の仕方を見ていきましょう。

まず、なぜコンフリクトエラーが発生するのか

コンフリクトエラーが発生すると混乱してしまいがちですが、難しく考えることはありません、
原因としては、単純に考えると別の作業者と同じ新規・編集したファイルがあるのです。
(時には同じファイルを編集していても行数が違えば自動で吸収してくれることも)

下記SourceTreeでエラーが発生した場合のイメージ

コンフリクト時、ソースコードは下記のように、コンフリクトを示すコードが書き込まれてしまう。

test1
<<<<<<< HEAD test11 ======= test2 >>>>>>> 2edbe34e01095394db515369ba03137be2e291c8

SourceTreeではデフォルトでコンフリクトを解決するためのツールは組み込まれていない

コンフリクト発生時に、「解決済み」というメニューが現れます。実はこれはコンフリクトの解消を自分で終えた、ということです。
何も解消していないのにこのメニューを押してしまうと、コンフリクトを明示しているコード(<<<<<<< HEADなど)が書かれたまま、
コミット・プッシュしてしまうことになります!(汗

ただしくコンフリクトを解消する

コンフリクト解消には、手動でソースコードを書き換えて対応することも可能です。
ですが、ツールを利用するのが良いかと思いますので、「外部マージツールを起動」を選択しましょう。

で、一つ問題があります! 恐らく最初からマージツールは入っていませんので、自前でインストールしましょう。

WindowsはWinMergeがオススメです。
WinMegeのダウンロードはこちらから

MacだとP4Mergeなどが良いと思います。
P4Mergeのダウンロードはこちらから

マージツールの設定は「環境設定」の「Diff」の項目から行えます。

下記はMacP4Mergeでのコンフリクト解消の様子です。

無事解決を行ったあとの様子。
※マージツールを終了しないとSourceTreeに反映されませんので注意してください。

あとはいつも通りコミット・プッシュするだけです。

もちろん手で衝突箇所を書き換えても同様にコンフリクトの解決ができます。

以上です。

いかがでしたでしょうか。
長くGitを使っている人でも、あまりコンフリクトに遭遇しないと、気づかずファイルを壊してしまっている可能性があります。
時には大惨事を招く可能性もありますので、コンフリクトには注意して対応をしましょう!

以上、佐々木でした。