こんにちは。Tomoyuki(@tomoyuki65)です。
みなさん、Gitって知っていますか?
私はSE歴5年ですが、転職活動でWebエンジニアに関することを調べるまで知りませんでした。(笑)
Webエンジニアの方は当たり前みたいなんですが、Gitを使うとファイル管理がとても便利なんです!
この記事では、そんなGitの使い方を解説します。
Gitとは?
Git(ギット)とは、分散型バージョン管理システムに分類される、バージョン管理を行うためのソフトウェアです。
そしてバージョン管理とは、変更履歴を管理することです。
具体的にはソースコードに加えた変更の過程を記録し、特定の段階まで戻ったり、誤って消してしまったファイルを元に戻したりすることができます。
Gitの登場以前は、Subversionなどの集中型バージョン管理システムが主流でしたが、現在では分散型のGitが主流になっています。(主にWeb業界での話ですが・・)
集中型と分散型の違いについて
集中型の場合は、図のようにリポジトリ(ファイルやディレクトリの状態を記録する場所)をサーバに集中させて配置するため、一つのリポジトリしか存在しません。
集中型は管理がシンプルであることがメリットですが、サーバに接続できない場合やサーバが故障した場合に最新のソースコードが取得できず開発が行えないデメリットがあります。
分散型の場合は、図のように特定のリポジトリをユーザごとに複製し、自分の環境に配置することで思うがままに編集できます。
ただし、一定のルールを決めずに好き勝手運用をしてしまうと最新のソースコードがわからなくなったり、そのルールを覚える学習コスト(Gitの使い方など)が高いデメリットがあります。
Gitのインストール方法
Gitのインストール方法は大きく分けて2通りあります。
尚、最近のMacであれば最初からインストールされていますが、以下方法にて最新版をインストールしましょう。
公式サイトからダウンロードする場合
まずはGitの公式サイトにアクセスしましょう。
ダウンロードボタンをクリックして下さい。
対応するOSをクリックしてファイルをダウンロードし、インストールして下さい。
Homebrewでインストールする場合
Homebrewでインストールする場合は、以下のコマンドを実行して下さい。
$ brew install git
また、Gitをアップデートしたい場合は、以下のコマンドを実行して下さい。
$ brew upgrade git
Gitの初期設定
インストール完了後、初期設定として名前とメールアドレスを設定します。名前は英字で入力して下さい。
ここで設定した名前とアドレスはコミットログなどに利用されますので、公開しても問題ないものを利用しましょう。
では以下のコマンドを順に実行して下さい。このコマンドは、「~/.gitconfig」に設定されます。
(ユーザ名とアドレスは変更して下さい。)
$ git config --global user.name "ユーザ名" $ git config --global user.email "メールアドレス"
尚、Homebrewのインストール方法についてはコチラの記事をご覧下さい。
Gitの基本的な操作
ではGitの基本的な使い方について説明します。
事前準備として、リポジトリを作成するディレクトリを作成して下さい。
今回は例として、ホームディレクトリの直下に「git-test」というディレクトリを作成し、そこでファイルの管理を行います。
git init(リポジトリの初期化)
まずはリポジトリの初期化を行いましょう。
ディレクトリ「git-test」に移動したことを確認し、以下のコマンドを実行して下さい。
$ git init
「git-test」ディレクトリ直下に「.git」ディレクトリが作成され、このディレクトリにリポジトリデータが格納されます。
「.git」は隠しファイルとなっているので、MacのFinderなどで確認した場合は通常非表示となっています。
Macであれば以下のキーで隠しファイルを表示・非表示を切り替え、「.git」ディレクトリを確認できます。
shift + command + .(ピリオド)
git status(リポジトリの状態を確認)
次に現在のリポジトリの状態を確認しましょう。
以下のコマンドを実行してみて下さい。
$ git status
実行結果は以下の通りです。
On branch master
Initial commit
nothing to commit (create/copy files and use “git add” to track)
「On branch master」は、masterという名前のブランチにいることを表し、その次はコミットがないことを表示しています。
このブランチとは、履歴の流れを分岐して記録するためのものです。
分岐したブランチは他のブランチの影響を受けないため、同じリポジトリ内で複数の変更を同時に進めることができます。
また、コミットとは変更を記録することです。
では「git-test」ディレクトリにファイルを追加し、もう一度リポジトリの状態確認してみましょう。今回は「readme.txt」というファイルを作成して追加します。
コマンドで空のファイルを追加する場合は、以下のコマンドを実行して下さい。
$ touch readme.txt
再度「git status」を実行した結果は以下の通りです。
On branch master
Initial commit
Untracked files:
(use “git add <file>…” to include in what will be committed)
readme.txt
nothing added to commit but untracked files present (use “git add” to track)
「Untracked files」にreadme.txtが表示されました。これは追跡中のファイルがステージ領域(indexと呼ばれることもある)に追加されていない状態を指しています。
git add(ステージ領域へファイルを追加)
次にファイルをステージ領域へ追加しましょう。ステージ領域(index)とは、コミットする前の一時領域のことです。
以下のコマンドを実行してみて下さい。
$ git add readme.txt
再度「git status」を実行した結果は以下の通りです。
On branch master
Initial commit
Changes to be committed:
(use “git rm –cached <file>…” to unstage)
new file: readme.txt
「Changes to be committed」は、ステージ領域に追加したファイルが表示されます。
git commit(リポジトリに記録)
ではリポジトリにコミットしましょう。
以下のコマンドを実行してみて下さい。「-m」は1行のコミットメッセージを記述するオプションです。
今回は例として「First commit」というコミットメッセージを記述します。
尚、オプションをつけない場合は、詳細なコミットメッセージを記述するこが可能です。
$ git commit -m "First commit"
実行結果は以下の通りです。
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 readme.txt
再度「git status」を実行した結果は以下の通りです。
On branch master
nothing to commit, working tree clean
git log(コミットログの確認)
以下のコマンドで、リポジトリにコミットされたログを確認できます。
$ git log
実行結果は以下の通りです。
commit 053540fca9a9f09ffbf3e641ea35caf25d210681
Author: ユーザ名 <メールアドレス>
Date: Wed Oct 11 14:52:18 2017 +0900
First commit
commitの「053540fca9a9f09ffbf3e641ea35caf25d210681」は、コミットを指し示すハッシュ値となります。
ハッシュ値は、他のコマンドで対象のコミットを指定する時に使用します。
また、AuthorにはGitに登録したユーザ名とメールアドレスが表示され、Dateにはコミットを実施した日時が記録されます。
尚、以下のコマンドのように、対象のファイルのログのみ確認することも可能です。
$ git log readme.txt
git diff(変更差分を確認)
ファイルの差分を確認するには「git diff」コマンドを利用します。
例として、readme.txtファイルに1行コメント「こんにちは。」を追加し、差分を確認してみましょう。
実行結果は以下の通りです。
diff –git a/readme.txt b/readme.txt
index e69de29..4597784 100644
— a/readme.txt
+++ b/readme.txt
@@ -0,0 +1 @@
+こんにちは。
「+」で表記されている行が追加された行で、削除された行がある場合は「-」で表記されます。
また、「git add」コマンドを実行後、「git diff」コマンドを実行するとステージ領域との差分がないため何も表示されません。
最新コミットとの差分を表示したい場合は、以下のコマンドを実行して下さい。
(HEADというのは、作業中のブランチの最新コミットを参照するポインタです)
$ git diff HEAD
実行結果は以下の通りです。
diff –git a/readme.txt b/readme.txt
index e69de29..4597784 100644
— a/readme.txt
+++ b/readme.txt
@@ -0,0 +1 @@
+こんにちは。
最新コミットとの差分が表示されたので、git commitコマンドを実行しましょう。
以下のコマンドを実行してみて下さい。
$ git commit -m "Add こんにちは。"
実行結果は以下の通りです。
1 file changed, 1 insertion(+)
尚、コミットログの確認結果は以下の通りです。
commit e6be088e6516e7098f7e8247c4666d3921cf8ae6
Author: ユーザ名 <メールアドレス>
Date: Wed Oct 11 15:31:29 2017 +0900
Add こんにちは。
commit 053540fca9a9f09ffbf3e641ea35caf25d210681
Author: ユーザ名 <メールアドレス>
Date: Wed Oct 11 14:52:18 2017 +0900
First commit
ブランチ操作
ブランチは別々の作業を並行して行うために利用します。
例えば、Gitのデフォルトで作成されるmasterブランチを元に新しいブランチを作成し、ブランチで作業を行います。
そしてブランチでの作業完了後、最終的にmasterブランチにマージします。
git branch(ブランチの一覧を表示)
ではブランチの一覧を表示してみましょう。
以下のコマンドを実行してみて下さい。
$ git branch
実行結果は以下の通りです。
* master
masterブランチの左側に「*」が表示されているのが確認できます。
これは現在のブランチを表しています。
git checkout(ブランチの切り替え)
次にmasterブランチを元に新しいブランチを作成し、作成したブランチに切り替えましょう。
今回は「branch1」というブランチを作成します。
では以下のコマンドを実行してみて下さい。
$ git checkout -b branch1
実行結果は以下の通りです。
Switched to a new branch ‘branch1’
これは、以下のコマンドを実行したのと同じ動きをします。
$ git branch branch1 $ git checkout branch1
もう一度ブランチの一覧を確認してみましょう。
* branch1
master
現在のブランチが「branch1」であることが確認できます。
git merge(ブランチをマージ)
次に作成したブランチのファイルを更新し、masterブランチにマージしてみましょう。
まずはreadme.txtファイルに1行コメント「branch1でコメントを追加」を追加して保存して下さい。
その後、以下のコマンドを順に実行し、コミットまで完了させて下さい。
$ git add readme.txt $ git commit -m "Add branch1からコメント追記"
ではmasterブランチにマージしてみましょう。
まずは以下のコマンドを実行し、masterブランチに切り替えましょう。
$ git checkout master
ブランチ一覧の確認した場合は以下の通りです。
branch1
* master
また、マージを行う前にreadme.txtファイルを確認してみて下さい。コメント追記前の状態が確認できるかと思います。
では以下のコマンドを実行し、masterブランチにbranch1をマージしましょう。
尚、「–no-ff」はマージコミットを作成するためのオプションです。
$ git merge --no-ff branch1
するとマージコミットのメッセージを記入するためのエディタが立ち上がりますので、今回は特に変更なしで保存します。
「ESC」キーでコマンドモードに切り替え、「ZZ」を入力して保存できます。
実行結果は以下の通りです。
Merge made by the ‘recursive’ strategy.
readme.txt | 1 +
1 file changed, 1 insertion(+)
最後にreadme.txtファイルを確認してみて下さい。
branch1で追加したコメントが表示されているかと思います。
git log –graph(ブランチを視覚的に確認する)
コミットログは、グラフでわかりやすく確認することができます。
以下のコマンドを実行してみて下さい。
$ git log --graph
実行結果は以下のようになります。
コミットを変更する操作
git reset(記録を戻る)
コミット後に特定の状態に戻したい場合、「git reset」コマンドを利用します。
状況に応じて、以下①〜のコマンドを実行しましょう。
①直前のコミットのみを取り消したい場合
$ git reset --soft HEAD^
尚、gitのv1.8.5から「HEAD」のエイリアスとして「@」が使用可能。
②直前のコミットから一つ前のコミットまでの操作を取り消したい場合
$ git reset --hard HEAD^
③コミット後の変更を全て取り消したい場合
$ git reset --hard HEAD
④addを取り消したい場合
$ git reset HEAD
⑤ハッシュ値を指定し、指定した位置まで戻したい場合
$ get reset --hard ハッシュ値
尚、ハッシュ値は「git log」コマンドで確認しましょう。
⑥直前のresetを取り消したい場合
$ git reset --hard ORIG_HEAD
まとめ
- Gitとは、分散型バージョン管理システムに分類される、バージョン管理を行うためのソフトウェア。
- バージョン管理システムには、集中型と分散型が存在し、それぞれメリットやデメリットが存在する。
- Gitは公式サイトからダウンロードしてインストールするか、Homebrewなどであればコマンドによりインストールが可能。
今回はGitの基本について解説しました。
もっと詳しく知りたい方は、私も参考にしているコチラの本もオススメです。
尚、Macのターミナルの使い方がよくわからない!
って方は、コチラの記事を参考にしてみて下さい。
Tomoyuki
最新記事 by Tomoyuki (全て見る)
- 【スト6】モダンキャミィの初心者向けコンボまとめ【STREET FIGHTER 6(ストリートファイター6)】 - 2024年11月10日
- モンハンワイルズでおすすめのオプション設定まとめ【Monster Hunter Wilds】 - 2024年11月4日
- モンハンワイルズでおすすめのグラフィック設定まとめ【Monster Hunter Wilds】 - 2024年11月2日
コメントを残す