見出し画像

こんにちわ。
アイシーティーリンクの鈴木です。

前回のブログに引き続き、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に触れてみてはいかかでしょうか。

最後までお読みいただきありがとうございました。


この記事が気に入ったらサポートをしてみませんか?