私はパーソナルカラーアナリストというディプロマを持っています。 その名の通りパーソナルカラーを診断できる資格です。 実際…
3/28(土)はD2Draftの「GitHubでチームコラボレーションことはじめ」に参加してきました。
〜この記事はコンフリクトの直し方についてしか書いていませんm(_ _)m〜
私は今までGitHub(Git)はチームで何かやるためにおそるおそる(仕方なく笑)使っていた節があるのですが、一番恐れていたコンフリクトの直し方を教えてもらったので、記憶のあるうちに書き留めておきたいと思います。
コンフリクトとは何かと言うと(それを知らない人はすでにここまで読んでいないような気がしますが)、Gitでブランチを作ってそれぞれに作業をした後、マージしようとした時に同じファイルの同じ行を変更した等、自動的にマージできない状態を指して言います。
この場合、当然ながら手動でどのブランチの変更を生かすかを決めないといけないのですが、その手順に戸惑うことが私はこれまで多かったのです。(詳しい人に泣きついてきた。)
ちなみにGitHubではそれぞれ各人のブランチで作業した結果をmaster(枝分かれの元となる本流のソース群)にマージしてほしいとお願いすることを「プルリクエスト」と呼びます。
コンフリクトが起きない場合
以下、自作自演のコンフリクトが起きない例。図中に”Create natasha.md”とあるようにファイルを新規作成しただけなのでコンフリクトの起きようがありません。
コンフリクトが起きたら・・・
(わざとコンフリクトを起こしてみました。)
とにかくソースをローカルに持ってくる。
フェッチとはリモートからローカルにソースをダウンロードすることです。
プルと何が違うのでしょうか。
プル=フェッチ+マージです。
今はマージするブランチがそもそもない状態ですのでどちらでもいいと思いますが、ローカルにも作業中のソースがあった場合、競合(コンフリクト)や不具合が起きる可能性もあります。
そういった場合に即マージするのではなく、一旦ダウンロードしてソースを検分するために「フェッチ」があります。
ブランチをチェックアウトする。
今はまだ作業スペースはnatashat-patch-2ブランチにはありません。
natashat-patch-2ブランチで作業できるようにブランチを切り替えることをチェックアウトすると言います。
SourceTree上の操作は、対象のブランチの上で右クリック→チェックアウトです。
チェックアウトすると自分の作業スペースで作業できるようになります。
ここでやっとマージ!
自分のローカルスペースにnatasha-patch-2ブランチができました。(下図左のビュー)
ログを見てもorigin/natasha-patch-2(リモート上のブランチ)がローカルにもコピーされたことがわかります。
さて、これでやっとマージできます。
どのコミットとマージしたいか選択します。
ドーン!知ってたよねーコンフリクトしてるから困ってるんだよねー。
すごすごとOKを押して元の画面に戻りましょう。
競合を解決
SourceTree上の真ん中辺りにステージしたファイル一覧があるので、競合しているファイルを右クリックします。
「競合を解決」〜自分の変更か相手の変更どちらを生かしたいかはっきりしている場合はメニューからどちらかを選んで解決します。
ここではどちらの変更も上手く取り入れたいとします。そうすると機械的な解決は無理なので、あきらめて「Finderで表示」して該当ファイルをエディタで開きます。
そして競合を手動で解決します。
やれやれ。
もう少しです。
今行った作業はまだ作業コピー上にあるだけで、ステージにaddされていないのでaddします。
(と言ってもチェックボックスにチェックを入れるだけ)
お疲れ様でした!