githubの勉強会に参加してきました。〜コンフリクトの直し方(SourceTreeの場合)〜

3/28(土)はD2Draftの「GitHubでチームコラボレーションことはじめ」に参加してきました。

〜この記事はコンフリクトの直し方についてしか書いていませんm(_ _)m〜

私は今までGitHub(Git)はチームで何かやるためにおそるおそる(仕方なく笑)使っていた節があるのですが、一番恐れていたコンフリクトの直し方を教えてもらったので、記憶のあるうちに書き留めておきたいと思います。

コンフリクトとは何かと言うと(それを知らない人はすでにここまで読んでいないような気がしますが)、Gitでブランチを作ってそれぞれに作業をした後、マージしようとした時に同じファイルの同じ行を変更した等、自動的にマージできない状態を指して言います。
この場合、当然ながら手動でどのブランチの変更を生かすかを決めないといけないのですが、その手順に戸惑うことが私はこれまで多かったのです。(詳しい人に泣きついてきた。)

ちなみにGitHubではそれぞれ各人のブランチで作業した結果をmaster(枝分かれの元となる本流のソース群)にマージしてほしいとお願いすることを「プルリクエスト」と呼びます。

コンフリクトが起きない場合

以下、自作自演のコンフリクトが起きない例。図中に”Create natasha.md”とあるようにファイルを新規作成しただけなのでコンフリクトの起きようがありません。

スクリーンショット 2015-03-31 0.43.36

 

コンフリクトが起きたら・・・

(わざとコンフリクトを起こしてみました。)

スクリーンショット 2015-03-31 1.43.28

 

とにかくソースをローカルに持ってくる。

スクリーンショット 2015-03-31 1.46.12

 

リモート(github上)からソースをフェッチしてきます。スクリーンショット 2015-03-31 1.49.33

 

フェッチとはリモートからローカルにソースをダウンロードすることです。

プルと何が違うのでしょうか。

プル=フェッチ+マージです。

今はマージするブランチがそもそもない状態ですのでどちらでもいいと思いますが、ローカルにも作業中のソースがあった場合、競合(コンフリクト)や不具合が起きる可能性もあります。

そういった場合に即マージするのではなく、一旦ダウンロードしてソースを検分するために「フェッチ」があります。

スクリーンショット 2015-03-31 1.50.22

 

ブランチをチェックアウトする。

今はまだ作業スペースはnatashat-patch-2ブランチにはありません。

natashat-patch-2ブランチで作業できるようにブランチを切り替えることをチェックアウトすると言います。

SourceTree上の操作は、対象のブランチの上で右クリック→チェックアウトです。スクリーンショット 2015-03-31 1.50.47

チェックアウトすると自分の作業スペースで作業できるようになります。

ここでやっとマージ

自分のローカルスペースにnatasha-patch-2ブランチができました。(下図左のビュー)

ログを見てもorigin/natasha-patch-2(リモート上のブランチ)がローカルにもコピーされたことがわかります。

さて、これでやっとマージできます。

 

どのコミットとマージしたいか選択します。

スクリーンショット 2015-03-31 1.59.02

 

スクリーンショット 2015-03-31 1.59.34

 

ドーン!知ってたよねーコンフリクトしてるから困ってるんだよねー。

すごすごとOKを押して元の画面に戻りましょう。

競合を解決

SourceTree上の真ん中辺りにステージしたファイル一覧があるので、競合しているファイルを右クリックします。

「競合を解決」〜自分の変更か相手の変更どちらを生かしたいかはっきりしている場合はメニューからどちらかを選んで解決します。

ここではどちらの変更も上手く取り入れたいとします。そうすると機械的な解決は無理なので、あきらめて「Finderで表示」して該当ファイルをエディタで開きます。

スクリーンショット 2015-03-31 2.00.51

 

そして競合を手動で解決します。

スクリーンショット 2015-03-31 2.02.50

 

スクリーンショット 2015-03-31 2.03.32

 

やれやれ。

もう少しです。

今行った作業はまだ作業コピー上にあるだけで、ステージにaddされていないのでaddします。

(と言ってもチェックボックスにチェックを入れるだけ)

スクリーンショット 2015-03-31 2.06.59

 

ここからはいつもと同じようにコミット→プッシュです。スクリーンショット 2015-03-31 2.12.14

 

GitHub上で見ると、ほーらこの通り。スクリーンショット 2015-03-31 2.13.23

 

 

お疲れ様でした!

 

 

神戸でフリーでWebデザイナーをやっています。 よく飲みよく食べよく寝ます。 お問い合わせ
トップへ戻る