Git入門②
こんにちわ。
アイシーティーリンクの鈴木です。
前回のブログに引き続き、Gitについてお話ししようと思います。
これを見るのが初めてだよ、という方は下記をご参照ください。
前回の復習になりますが、Gitを使えば簡単にソースコードをバージョン管理できるので、とてもおススメです。
Gitを使うメリットとしては
・共同作業ができる
・更新履歴を記録し、後から確認したり前の状態に戻すことができる
などが上げられます。
今回のブログでは複数人でGitを利用していてバージョン管理をする際に使うコマンドを紹介します。
ブランチ
ブランチを利用すると、リポジトリの中で任意のコミットを分岐させて、別データとして共存させることができます。Gitでは、デフォルトのブランチはmasterです。
git branch
現在のブランチとブランチの一覧を確認することができます。
$ git branch
* master
git branch <branch name>
新しいブランチを作成することができます。
$ git branch new-branch
$ git branch
* master
new-branch
git checkout <branch>
ブランチ間の移動をおこなうことができます。
$ git checkout new-branch
$ git branch
* new-branch
master
fetch
リモートリポジトリの変更点を取得するコマンドです。リモートリポジトリにある情報が最新で、ローカルリポジトリとの情報に差異がある場合に有効です。
$ git fetch
remote: Counting objects: 3, done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.
From github.com:your-name/your-repository.git
d15cddc..d840590 master -> origin/master
これによって、リモートリポジトリのmasterブランチの内容が、ローカルリポジトリのorigin/masterというブランチに適用されます。ここからもし、 origin/masterブランチをローカルリポジトリのmasterブランチにマージしたい場合は、下記を実行します。
$ git checkout master
$ git merge origin/master
fetchとmergeをいっぺんに行いたい場合はgit pullを使います。
pullの際のコンフリクトとその解消
リモートリポジトリからpullをする場合、他の利用者と同時に作業をしていた場合コンフリクト(衝突)が発生する場合があります。
$ git pull
Auto-merging Sample.txt
CONFLICT (content): Merge conflict in Sample.txt
Automatic merge failed; fix conflicts and then commit the result.
この場合, 利用者が手動でコンフリクトを解消しなければいけません。 出力には、Sample.txtでコンフリクトが発生している、と表示されているので該当のテキストファイルを確認してみます。
<<<<<<< HEAD
# これはテストです。
=======
# これはテストです!!!
>>>>>>> 5dd36fe276784f9d18287279d91dfc19000c01fd
<<<<<<< HEADから=======で囲まれた部分がローカルリポジトリの内容で、=======から>>>>>>> で囲まれた部分がリモートリポジトリの内容になります。 Gitは、この部分についてどちらの内容をpullすればいいか判断で出来なかったことを表しています。
Sample.txtを正しい(期待する)内容に書き換え、下記コマンドを実行します。
$ git add .
$ git commit
すると, 次のような文面が入力された状態でエディタが開きます。
Merge branch 'master' of github.com:your-name/your-repository.git
# Conflicts:
# Sample.txt
#
# It looks like you may be committing a merge.
# If this is not correct, please remove the file
# .git/MERGE_HEAD
# and try again.
# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
# On branch master
# Your branch and 'origin/master' have diverged,
# and have 1 and 1 different commit each, respectively.
# (use "git pull" to merge the remote branch into yours)
#
# All conflicts fixed but you are still merging.
#
# Changes to be committed:
# modified: Sample.txt
#
基本的に、このままの文面でコミットして問題ありません。このコミットは、異なるリポジトリ間のコミットをマージしているので、「マージコミット」と呼ぶこともあります。これで、コンフリクトが解消されます。同様にpush時に起きたコンフリクトも同様の手順で解消できます。
$ git commit
[master ea69b8e] Merge branch 'master' of github.com:your-name/your-repository.git
<最後にこれだけは注意>:危険なpush -fコマンド
pushする際、コンフリクトを無視して無理やりを実行する行う-fオプションがありますが、 特にチームで開発を行う際には絶対に使わないようにしましょう。もし実行しまうと、ローカル/リモートリポジトリ間のコミットの関係がおかしくなって、解消が非常に面倒なことになります。
今回のブログは以上になります。
2回にわたってGitについて紹介してきました。
コマンドで実行するのは最初は慣れるまで難しいですが、慣れてくると
とても楽しいです。Gitコマンドは今回紹介したもの以外にも沢山ありますが、まずは基本的なコマンドをマスターして、この機会にGitに触れてみてはいかかでしょうか。
最後までお読みいただきありがとうございました。
この記事が気に入ったらサポートをしてみませんか?