プログラミングの学習を始めると、すぐに「Git」という言葉に出会います。Gitは、ソフトウェア開発の現場で使われるバージョン管理ツールであり、多くの開発者にとって欠かせない存在となっています。しかし、Gitのコマンドやワークフローは初心者にとっては難解に感じることが多く、多くの人がこのステップで挫折してしまいます。
「なぜGitはこんなに複雑なのか?」、「基本的なコマンドだけで十分なのでは?」と疑問に思うかもしれません。しかし、Gitの背後には、チームでの協力や過去の変更履歴のトラッキングといった、非常に強力な機能が備わっています。そのため、一度Gitの基本を理解してしまえば、その後の開発作業が格段にスムーズになります。
この記事では、Gitの基本的なコマンドとその使い方を、初心者の方でもわかりやすく解説します。
Gitに挫折しないための第一歩として、ぜひこの記事を参考にしてみてください。
Gitを使う際に覚えておきたい用語
Gitコマンドの使い方をお伝えする前に、Gitを扱う際に覚えておいたほうが良い用語をいくつか紹介します。
GitとGithubの違い
よく勘違いされている方がいますが、GitとGithubは別物です。
Gitは、あなたのコードの変更履歴を追跡・管理するツールです。それに対して、GitHubはGitで管理されたコードをオンラインで保存・共有するためのプラットフォームです。簡単に言うと、Gitはあなたのプロジェクトの「日記帳」、GitHubはその「日記帳」を公開・共有する「図書館」のようなものです。GitHubを使うことで、他の人と簡単にコードを共有したり、協力して開発することができます。
リポジトリとは
リポジトリとはファイルやディレクトリの状態を記録する場所で、Gitでコードを管理するにはリポジトリの作成が必須となります。
このリポジトリは、開発するサービス(アプリ)単位でつくる場合もあれば、1つのアプリでもサーバーやフロントのコードで分けて複数作成する場合もあります。
慣れないうちは開発するサービス単位で1つだけリポジトリを作るのが良いでしょう。
リモートリポジトリ
リポジトリには2種類存在し、そのうちの1つがリモートリポジトリです。
リモートリポジトリとはGitで管理しているリポジトリを複数人で共有出来るようにするために、Githubなどのサービスに配置してあるリポジトリを指します。
例えばGithub上の画面から新たなリポジトリを作成した場合は、それはネット上にあり複数人で共有することが出来るのでリモートリポジトリになります。
ローカルリポジトリ
もう片方のリポジトリがローカルリポジトリとなります。
ローカルリポジトリとは開発者が手元のパソコンで開発をする際に利用するリポジトリです。
開発者は各々のパソコンにディレクトリ、ファイルなどを持ってきて開発を行い(リモートリポジトリ)、開発が終わったらリモートリポジトリに開発内容を反映させて、他の開発者に開発した内容を共有していきます。
git cloneを使ってローカルにリポジトリを持ってこよう
github上にあるリポジトリをローカルに落としてくる際に使用するコマンド。
一人で開発している場合は使用することが滅多にないがチームで開発をする場合にはまずこれを使うことが多い。git cloneを行う際には「SSH」と「HTTPS」の2種類あるがgithubに鍵登録を行っている場合はSSHでcloneするのがおすすめ。
$ git clone git@github.com:rails/rails.git
githubにログインしている時のみ下記の画像の様にSSHのリンクを表示することが可能なのでUse SSHが出てこずにSSHでクローンが出来ないという人はgithubにログインされているかを確認しよう。
git branchでブランチの確認、移動、削除
ブランチの確認、作成、削除したりするコマンド
# ローカルにあるブランチ一覧と現在自分がいるブランチを確認
$ git branch
# ブランチの作成
$ git branch feature/implements-something
# ブランチの削除
$ git branch -D feature/implements-something
git addでファイルを追加してみよう
ローカルで行った追加・変更をgithubのインデックスに追加するためのコマンド
基本的にはファイル名を指定するパターンと一括で追加する2パターンで利用される事が多い。
# sample.txtというファイルを追加
$ git add sample.txt
# カレントディレクトリのファイルを全て追加
$ git add .
ちなみに上記の方法だとadd時にファイルの差分が見れないという欠点があるので個人的には「-p」オプションを使うことを強く推奨したい。
- git diffを使わずに変更差分が見れる
- 1つのファイルでも塊単位でaddするかを選択可能
例としては下記のようなREADME.mdの差分があるとする
git add -pの使い方①
MacBook-Air-2:first_project himakuro
$ git diff
diff --git a/README.md b/README.md
index b62376a..5ea765a 100644
--- a/README.md
+++ b/README.md
@@ -4,6 +4,9 @@ First git project
## Requirements
- first requirement
- second requirement
+- third requirement
+- forth requirement
+- fifth requirement
## Usage
@@ -13,5 +16,6 @@ First git project
- third step
## Author
+- himakuro
## Lisence
このファイルのauthorのところだけを追加したい場合は下記のように行う。
MacBook-Air-2:first_project himakuro$ git add -p
diff --git a/README.md b/README.md
index b62376a..5ea765a 100644
--- a/README.md
+++ b/README.md
@@ -4,6 +4,9 @@ First git project
## Requirements
- first requirement
- second requirement
+- third requirement
+- forth requirement
+- fifth requirement
## Usage
Stage this hunk [y,n,q,a,d,/,j,J,g,e,?]? n
@@ -13,5 +16,6 @@ First git project
- third step
## Author
+- himakuro
## Lisence
Stage this hunk [y,n,q,a,d,/,K,g,e,?]? y
塊単位で「Stage this hunk」(差分をadd)するか聞かれるのでaddする場合は「y」、しない場合は「n」と入力していく。
なかなか初心者のうちはオプションを使うという所まで頭が回らないかもしれないがこれは最初のうちから使って定着させておくと良い。
git checkoutでブランチ作成、移動、差分の巻き戻し
ファイルの変更を巻き戻したいときに巻き戻せるみんなの強い味方。
こちらも -p オプションが存在するので適宜活用していくと良さ。ちなみにブランチ移動もこのコマンドで行う。
# README.mdの差分を巻き戻す
$ git checkout README.md
# README.mdの一部差分を巻き戻す
$ git checkout -p
# masterブランチに移動
$ git checkout master
# 現在いるブランチをベースに新たなブランチを作成して移動
$ git checkout -b feature/update-readme
4つ目に記載した「-b」オプションは「git branch feature/update-readme」と「git checkout feature/update-readme」を合体させたようなコマンドで1つのコマンドでブランチ作成・移動をしてくれるので是非覚えておきましょう。
git diffで変更した差分の確認
git管理下にあるファイルの差分を表示するコマンド。
addしてある状態のファイルの差分は「–staged」というオプションを付けない表示されないので注意
また、上記にも記載したが「git管理下にあるファイルの差分」を表示するものなので、新規ファイルを追加してaddしていない状態だと表示されないのでここも注意。
# 変更した全てのファイルの差分を確認
$ git diff
# README.mdの差分を確認
$ git diff README.md
# addした状態のファイルの差分を確認
$ git diff --staged
git statusで追加、変更したファイルを確認
現在addしているファイルや差分が発生しているファイルを見る際に使用。
# 現在いるリポジトリの各ファイルの状態を確認
$ git status
実行例
git status
MacBook-Air-2:first_project himakuro$ git status
On branch feature/implement-something
Changes to be committed:
(use "git reset HEAD ..." to unstage)
modified: README.md
Changes not staged for commit:
(use "git add ..." to update what will be committed)
(use "git checkout -- ..." to discard changes in working directory)
modified: README.md
Untracked files:
(use "git add ..." to include in what will be committed)
index.html
- Changes to be committedにあるmodifiedはadd済みの変更差分
- Changes not staged for commitにあるmodifiedは変更差分はあるがまだaddされていない状態
- Untracked filesにあるindex.htmlは新規に追加されたファイルでまだaddされておらず、git管理されていない状態
git commitをして変更した内容をコミットしよう
github上に変更した内容をpushするために必要なコマンドでaddした内容をコミットという単位にまとめてくれます。
このコミットという単位で差分を巻き戻したり、別のブランチに持っていったりする事もあるので極力小さい単位でコミットを実行する癖をつけておきましょう。
# メッセージを付けてcommit
$ git commit -m "update README.md"
git pushでコミットした内容をリモートにアップしよう
コミットした内容をリモート(githubにアップ)するためのコマンド。
コミットだけしてもその内容はgithub上にはアップされないのでコミットした内容は必ずプッシュしましょう。割とベテランの人でもコミットだけして満足してプッシュを忘れることがあったりします。
# feature/implement-somethingのブランチの内容をgithubにプッシュ
$git push origin feature/implement-something
git pullで他人が変更したファイルを落としてこよう
github上にある最新の情報を取得するために使うコマンド。
主に同じリポジトリで作業している人が何かしらの差分をpushした際に、その内容をローカル環境に取り込む時に利用。
# 最新のdevelopブランチの内容を取得
$ git pull origin develop
Gitのコマンドはすべて覚える必要はない
今回の記事では実務でもよく利用するコマンドの使い方を紹介しました。
Gitには様々なコマンドやオプションがありますが、それらを全て暗記する必要はありません。
コマンドを使ってどの様な事が出来るかだけを把握しておくことで、ネット上で検索出来るようになっておきましょう。