こんにちは、Unityエンジニアのオオバです。

お悩みさん
お悩みさん
  • Sourcetreeでプッシュできない
  • なんか他の人と作業がかぶった
  • 解決方法を知りたい
  • オオバ
    オオバ
    本記事ではこれらの悩みを解決します。

    Unityで作業して作業内容をSourcetreeからGitHubにプッシュできない事ありませんか。もしかすると、他の人と 同じタイミングで同じ画像を編集 したのかもしれません。

    作業が被ることを「コンフリクト」とよびます。コンフリクトするとGitHubに作業をアップロードできないのです。そこで本記事は 作業がかぶって途方にくれている方 に向けて、具体的な解決方法を解説します。

    コンフリクトの解決方法はどちらかの作業を捨てる

    結論を簡単にまとめます。

    コンフリクトの解決方法

    ①「コンフリクト」状態ではマージできない

    ②どちらかの作業を捨てる

    ③作業前の最新化、チーム内での連携は重要

    プログラムのようなテキストファイルの場合、コンフリクトしてもそこまで問題にはなりませんが、画像やPrefabは致命的です。画像の編集作業がコンフリクトするとテキストファイルのように 解決できません 。結論、どちらかの作業を捨てるしかありません。

    コンフリクトすると焦ってしまい、作業効率を下げる原因になりがちですが事前に知っていれば対処できます。この記事は コンフリクトを解決する具体的な方法 をSourcetreeを使って紹介します。ぜひ最後まで読んでみてください。

    👉DOTweenの教科書を読んでUnityアニメーションをプログラミングしてみよう!

    コンフリクトはどういうときに起きる?

    まずはコンフリクトする状況を理解しましょう。冒頭解説のとおりコンフリクトとは他人と作業の重複です。具体的には同じファイルを同じタイミングで編集してしまった状態です。

    AさんとBさんの画像修正を例に解説します。

    【Unity】Sourcetreeでコンフリクトを直す方法_0

    Aさんは「work_a」ブランチ、Bさんは「work_b」ブランチを作りました。両者は同時に「image.png」を編集したとします(上図)。

    【Unity】Sourcetreeでコンフリクトを直す方法_1

    ここで、まずAさんは「work_a」ブランチにコミットし、プッシュしてマージされました(上図)。

    この後、Bさんは遅れてコミットして、プッシュするのですが、 Aさんの作業を取り込む前にimage.pngを編集したのです。

    【Unity】Sourcetreeでコンフリクトを直す方法_2

    「work_b」をコミット&プッシュしてプルリク作成まで進めます。

    コンフリクトしているため、プルリク作成時の表示が変化します(↓下図参照)。

    【Unity】Sourcetreeでコンフリクトを直す方法_3

    コンフリクトしているファイルは image.png です。これがコンフリクトした状態です。 同タイミングで同じ画像ファイルを編集 すると起きます。

    コンフリクトの解決方法

    ここからコンフリクトの解決方法を解説します。結論から話すと「作業の打ち消し」です。つまりなかったことにするのです。いくら時間をかけて良いものを作ったとしてもコンフリクトは無にします。この無にする作業をしないと前に進めないため、ドライに進めていきましょう。

    まずは自分(Bさん)の 環境を最新化 します。最新化はプルでしたね。

    【Unity】Sourcetreeでコンフリクトを直す方法_4

    Sourcetreeのプルをクリック。

    【Unity】Sourcetreeでコンフリクトを直す方法_5

    プルするリモートのブランチmainブランチ にします。これでmainブランチの内容がBさんのブランチ(work_b)に取り込まれます。

    【Unity】Sourcetreeでコンフリクトを直す方法_6

    ここで マージの競合 というダイアログが登場します。OKをクリック。

    【Unity】Sourcetreeでコンフリクトを直す方法_7

    すると、左側のラインが灰色になりましたよね。灰色のラインは「コンフリクト状態した」というサインです。「Uncommitted changes」を選択しましょう。

    【Unity】Sourcetreeでコンフリクトを直す方法_8

    するとビックリマークのついたファイルが登場します。ビックリマークがコンフリクトしているファイルの証です。

    コンフリクトした image.pngを解決していきます。

    【Unity】Sourcetreeでコンフリクトを直す方法_9

    ここから2つの選択肢が現れます。 自分、または相手どちらの作業を残すかということです。

    コンフリクト解決パターンA.自分の作業の削除

    相手(Aさん)の作業を残す場合です。つまり自分(Bさん)の作業を削除します。

    【Unity】Sourcetreeでコンフリクトを直す方法_10

    競合を解決 > 相手の変更内容で解決 をクリック。

    【Unity】Sourcetreeでコンフリクトを直す方法_11

    OK ボタンをクリックすると、自分(Bさん)の作業を打ち消して、Aさんの作業を採用します。

    コンフリクト解決パターンB.相手の作業の削除

    自分(Bさん)の作業を残す場合です。つまり相手(Aさん)の作業を削除します。

    【Unity】Sourcetreeでコンフリクトを直す方法_12

    競合を解決 > 自身の変更内容で解決 をクリック。

    【Unity】Sourcetreeでコンフリクトを直す方法_13

    OK ボタンをクリックすると完了です。

    コンフリクトの解決

    【Unity】Sourcetreeでコンフリクトを直す方法_14

    このように左のグレーの線がなくなりました。つまりコンフリクトが解決したということです。パターンA、Bどちらを選んでもここからの作業は同じです。

    コミットして作業環境の最新化は完了

    コンフリクトの解決を含めた内容をコミットして、初めて 自分の作業環境は最新化 されます。

    【Unity】Sourcetreeでコンフリクトを直す方法_15

    いつもどおりコミットをクリック。

    【Unity】Sourcetreeでコンフリクトを直す方法_16

    すると作業内容(コミットメッセージ)になにやら記載があります。 コンフリクトを解決したメッセージ が自動で挿入されているだけなので無視して大丈夫です。そのまま コミット ボタンをクリック。

    【Unity】Sourcetreeでコンフリクトを直す方法_17

    すると「origin/master」ブランチが「workb」ブランチに取り込まれました。これでようやく作業環境が最新化されました。つまり、 コンフリクトしたあとのプルがここで完了した_ ということです。

    プッシュボタン をクリックします。

    【Unity】Sourcetreeでコンフリクトを直す方法_18

    「workb」ブランチの作業内容をアップロードします。 _OK ボタンをクリック。

    【Unity】Sourcetreeでコンフリクトを直す方法_19

    GitHubのページを見てみましょう。このようにいつもの平和な画面が表示されました。

    まとめ : Sourcetreeでコンフリクトを解決する方法

    記事の内容を簡単にまとめます。

    Sourcetreeでコンフリクトを解決する方法
    • コンフリクトしたらプルして作業環境の最新化
    • Sourcetreeでどちらかの作業を削除
    • 相手の変更内容で解決 or 自身の変更内容で解決

    こんな感じです。

    コンフリクトが起きるとどうしても余計な手間が発生します。できるかぎり コンフリクトが起きない体制 が大事です。よくある方法は、ファイルをさわるまえに一声かけることです。

    Slackでこんな感じで共有します。

    【Unity】Sourcetreeでコンフリクトを直す方法_20

    しかし、 どうしてもコンフリクトが発生 することはあります。そのときための解決方法として本記事を参考にしていただければと思います。基本はエンジニアにお願いするケースが多いと思います。ただUIデザイナーやプランナーといったエンジニア外の職種メンバーが自身で解決できると、エンジニア的には すごいな って思います。

    ぜひ 自分でコンフリクト解決 を試してみてはいかがでしょうか。

    「Unity初心者大学」というUnity初心者向けのYouTube始めました!!
    ぜひチャンネル登録をお願いします!

    最後まで読んでいただきありがとうございました!
    すばらしいUnityライフをお過ごしください。

    オススメ記事