本連載「こっそり始めるGit/GitHub超入門」では、バージョン管理システム「Git」とGitのホスティングサービスの1つ「GitHub」を使うために必要な知識を基礎から解説していきます。具体的な操作を交えながら解説していきますので、本連載を最後まで読み終える頃には、GitやGitHubの基本的な操作が身に付いた状態になっていると思います。
連載第4回目の本稿のテーマは「コンフリクトが発生したときの対処方法」です。
前回の「ポインタ嫌いでも分かるGitブランチの基本――作成、確認、切り替え、masterにマージ、削除」までで「ブランチ作成」から「マージ」までの一連の操作を行いました。前回行った一連の操作では片方の「second」ブランチだけで変更を進めたので、変更内容が複数ブランチ間で「コンフリクト(衝突、競合)」することなく簡単にマージできました。しかし、実際の開発では変更内容がコンフリクトしてしまう場合があります。
今回は、意図的にコンフリクトが起こるような操作を行って、コンフリクトが起こったときの対処方法を説明します。
コンフリクトが発生したときに行う基本作業をまとめますと、以下のようになります。「1」の作業は特殊ですが、「2」と「3」は通常のGitの基本作業と同じです。
前回作業を終えた時点では、「second」ブランチを削除して「master」ブランチだけが存在しています。カレントブランチも「master」ブランチです。
$ git branch * master
この状態で新たにブランチを作成します。前回「second」ブランチまで作っていたので、新たなブランチは「third」とします。
「git checkout -b {新規作成するブランチ名}」コマンドを使用すれば、「ブランチの作成」と「ブランチの切り替え」を同時に行えます。
今回はブランチ作成と切り替えを同時に行ってみます。
$ git checkout -b third Switched to a new branch 'third' $ git branch master * third
「third」ブランチが作成され、カレントブランチが「third」ブランチになりました。
ここで、hello.txtの中身を確認してみます。3行表示されます。
$ cat hello.txt Hello goodbye konnichiwa
「hello.txt」ファイルにさらに1行追加し、コミットします。
$ echo sayounara >> hello.txt $ git add hello.txt $ git commit -m "add sayounara to hello.txt" [third b6d5577] add sayounara to hello.txt 1 file changed, 1 insertion(+) $ git status On branch third nothing to commit, working directory clean
4行目が追加されました。
$ cat hello.txt Hello goodbye konnichiwa sayounara
再びmasterブランチに戻ります。
$ git checkout master Switched to branch 'master' $ git branch * master third
ここで、hello.txtの中身を確認してみます。3行のままです。
$ cat hello.txt Hello goodbye konnichiwa
「『third』ブランチでのファイル変更」で追加した文字列とは別の文字列を追加し、コミットします。
$ echo konbanwa >> hello.txt $ git add hello.txt $ git commit -m "add konbanwa to hello.txt" [master ad169d4] add konbanwa to hello.txt 1 file changed, 1 insertion(+) $ git status On branch master nothing to commit, working directory clean
4行目が追加されました。
$ cat hello.txt Hello goodbye konnichiwa konbanwa
今回新たに作成した「third」ブランチで行った変更を「master」ブランチにマージしましょう。「git merge」コマンドを使用します。
$ git merge third Auto-merging hello.txt CONFLICT (content): Merge conflict in hello.txt Automatic merge failed; fix conflicts and then commit the result.
予想通り、hello.txtの変更がコンフリクトしました。「自動マージが失敗しました」というメッセージが表示されています。
Copyright© 2016 ITmedia, Inc. All Rights Reserved.
@IT編集部では、編集記者を募集しています。ご興味のある方は奮ってご応募ください。