【入門】Git を初心者向けにわかりやすく解説

スポンサーリンク

Git とは

Git とは、バージョン (ファイルの変更履歴) を管理するソフトウェアです。

Git と使うと、簡単に編集前のファイルに戻すことができます。

以下のような混沌としたバージョン管理とはおさらばできます。

  • 資料.txt
  • 資料のコピー.txt
  • 資料の最新.txt
  • 資料の最終版.txt
  • 資料の最終版v2.txt
  • 資料の最終版のコピー.txt
スポンサーリンク

Git の用語

Git でよく利用する用語は以下です。

用語説明
リポジトリファイルの変更履歴を保存する場所
ローカルリポジトリ個人の PC 上に作成し、自分だけがアクセスできるリポジトリ
リモートリポジトリサーバー上に作成し、複数人がアクセスできるリポジトリ
ワークツリーファイルの変更作業をしているディレクトリ
インデックスファイルの変更履歴を一時的に登録する領域
ステージングワークツリーの変更履歴をインデックスに登録
コミットインデックスに登録した変更履歴をローカルリポジトリに反映
ブランチ変更履歴を分岐して、複数の変更履歴を作る
チェックアウトワークツリーにブランチを展開
マージ分岐した2つの変更履歴を1つにする
クローンリモートリポジトリの複製を、ローカルリポジトリに作成
プッシュローカルリポジトリのコミットを、リモートリポジトリに渡す
リモート追跡ブランチ
(origin/master)
ローカルリポジトリのブランチ
リモートリポジトリの更新情報を保管する
フェッチリモートリポジトリから更新情報を読みこむ
読みこんだリモート追跡ブランチに保管
プルリモートリポジトリのコミットを、ローカルリポジトリに取り込む
スポンサーリンク

Git をインストール

Mac に Git をインストールします。(Windows はこちら)

brew install git
git --version
git version 2.30.1 (Apple Git-130)

コマンドの使い方

以下の順で Git で利用するコマンドの使い方を紹介します。

  1. 設定
  2. 基本操作
  3. ブランチ操作
  4. リモートリポジトリ関連の操作

設定

--global グローバルオプション

グローバルオプションとは、使用ユーザーの設定です。

git config --global user.name <ユーザー名> でユーザー名を登録します。

git config --global user.name hoge

git config --global user.email <メールアドレス> でメールアドレスを登録します。

git config --global user.email test@example.com

--list 設定の確認

git config --list
user.name=hoge
user.email=test@example.com

init リポジトリを作成

リポジトリとは、ファイル変更履歴を保存する場所です。

git init
ls -a
.		..		.git

.git フォルダが作成されていることが確認できます。

基本操作

status ワークツリーのステータスを確認

ワークツリーとは、現在ファイルの変更作業をしているディレクトリです。

echo test > test.txt
git status
Untracked files:
  (use "git add ..." to include in what will be committed)
	test.txt

git が追跡してない "test.txt" ファイルが新しく作成されたことを確認できます。

add ステージング

ステージングとは、ワークツリーのファイルの変更履歴をインデックスに追加することです。

インデックスとは、ファイルの変更履歴を一時的に登録する領域です。

git add <ファイル名> でインデックスファイルの変更履歴を追加します。

git add test.txt

なお、 -A オプションですべてのファイルをステージングできます。

git status
No commits yet

Changes to be committed:
  (use "git rm --cached ..." to unstage)
	new file:   test.txt

インデックスに登録できていることが確認できます。

なお、インデックスの内容をローカルリポジトリに反映するには、コミットをします。

commit コミット

コミットとは、インデックスに登録した変更履歴をローカルリポジトリに反映することです。

git commit -m "<好きなコメント>"

git commit -m "test.txt をコミット"
git status
nothing to commit, working tree clean

「ローカルリポジトリにコミットした内容」と「ワークツリー」の内容が一致していることが確認できます。

補足:「git commit <ファイル名> -m "<コメント>"」で add と commit を同時にできます。
(-a オプションで全てのファイルを対象)

log コミットログを確認

git log
Author: hoge <test@example.com>
Date:   Mon Jun 6 15:50:55 2022 +0900

    test.txt をコミット

先ほどのコミット内容を確認できます。

diff 変更履歴の差分を確認

git diff で「ローカルリポジトリにコミットした内容」と「ワークツリー」の差分を確認できます。

echo addMessage >> test.txt
git diff
--- a/test.txt
+++ b/test.txt
@@ -1 +1,2 @@
 test
+addMessage

以下のことが読み取れます。

  • 「@@ -1」より、変更履歴は変更前の1行目に相当
  • 「@@ +1,2」より、変更履歴は変更後の1~2 行目に相当
  • 「+addMessage」より、「addMessage」という内容が追加

reset 取り消し

■ステージングの取り消し

git reset <ファイル名> で、指定したファイルのステージングを取り消します。

git add test.txt
git status
Changes to be committed:
  (use "git restore --staged ..." to unstage)
	modified:   test.txt

test.txt がステージングされていることが確認できます。

git reset test.txt
git status
Changes not staged for commit:

ステージングが取り消せたことが確認できます。

■コミットを取り消し

git commit test.txt -m "test.txt をコミットその2"
git log
commit xxxxxxxxxxxxxxxxxxxxxxxx (HEAD -> master)
Author: hoge 
Date:   Mon Jun 6 16:46:44 2022 +0900

    test.txt をコミットその2

commit xxxxxxxxxxxxxxxxxxxxxxxx
Author: hoge 
Date:   Mon Jun 6 16:10:49 2022 +0900

    test.txt をコミット

"test.txt をコミットその2" のコミットを取り消します。

git reset --soft HEAD^
git log
commit xxxxxxxxxxxxxxxxxxxxxxxx (HEAD -> master)
Author: hoge 
Date:   Mon Jun 6 16:10:49 2022 +0900

    test.txt をコミット

直前のコミットが取り消され、HEAD (現在作業している場所を示すポインタ) が1回目のコミットに戻っています。

なお、「git reset --hard HEAD^」でコミットもワークツリー内のファイルの変更も取り消します。

checkout ファイルの変更を戻す

チェックアウトとは、ワークツリーにブランチを展開することです。

チェックアウトにより、最後にブランチにコミットした変更履歴に戻します。

cat test.txt
test
addMessage

git checkout HEAD -- <ファイル名> で最後にコミットした変更履歴に戻します

git checkout HEAD -- test.txt
cat test.txt
test

先ほど追加した "addMessage" という変更が消え、コミットした変更履歴に戻っています。

ブランチ操作

ブランチとは、変更履歴を分岐して、複数の変更履歴を作ることです。

稼働中と開発中でブランチを分けることで、稼働中のサービスに影響を与えずに開発側のブランチでソースコードを変更できます。

branch ブランチを作成

git branch <ブランチ名> でブランチを作成します。

git branch dev

branch ブランチの確認

git branch
  dev
* master

作成した dev ブランチを確認できます。master は分岐前のブランチです。

「*」は現在ワークツリーに展開しているブランチです。

checkout ブランチの切替

チェックアウトとは、ワークツリーにブランチを展開することです。

git checkout <ブランチ名> でワークツリーに展開しているブランチを切り替えます。

git checkout dev
Switched to branch 'dev'
git branch
* dev
  master

dev に「*」がついているので、ワークツリーに展開しているブランチが変更できています。

merge マージ

マージとは、分岐した2つの変更履歴を1つにする処理です。

echo branch >> test.txt
cat test.txt
test
branch
git commit test.txt -m "dev ブランチで編集"
git checkout master
Switched to branch 'dev'
cat test.txt
test

dev ブランチでコミットした編集内容が master ブランチには反映されてません。

これは、checkout でブランチを切り替えた時、「リポジトリに最後にコミットされた変更履歴」が「ワークツリー」に展開されるからです。
(dev ブランチで編集した内容は、Master ブランチにコミットしてない)

git merge <ブランチ名> で現在ワークツリーに展開しているブランチに、指定したブランチをマージします。

git merge dev
cat test.txt
test
branch

dev リポジトリにコミットした内容がマージできています。

-D ブランチの削除

git branch -D dev
git branch

dev ブランチが消えました。

リモートリポジトリ関連の操作

リモートリポジトリとは、サーバー上に作成し、複数人がアクセスできるリポジトリです。

通常は Github にリモートリポジトリを作成します。

clone クローンを作成

クローンとは、リモートリポジトリの複製を、ローカルリポジトリに作成することです。

git clone <URL>

remote add リモートを追加

git remote add <名前> <リモートリポジトリの URL>
URL で指定したリモートリポジトリに名前をつけ、追加します。

git remote add origin https://example.com

remote -v リモートリポジトリの名前を確認

git remote -v
origin	https://example.com (fetch)
origin	https://example.com (push)

push ローカルからリモート

プッシュとは、ローカルリポジトリのコミットを、リモートリポジトリに渡すことです。

git push <リモートリポジトリの名前> <ブランチ名> でプッシュします。

git push origin master

fetch 更新情報を取得

フェッチとは、リモートリポジトリから更新情報を読みこむことです。

読み込んだ情報は、ローカルリポジトリのリモート追跡ブランチ (origin/master) という場所に保存します。(Master ブランチにはマージしません)

git fetch
git diff origin/master
@@ -1 +0,0 @@
-change

pull リモートからローカル

プルとは、リモートリポジトリのコミットを、ローカルリポジトリに取り込むことです。

なお、pull は差分を取得、clone は全て取得です。

git pull <リモートリポジトリ名> <ブランチ名> でプルします。

git pull origin master

pull は内部的にリモートリポジトリからフェッチし、リモート追跡ブランチと master ブランチをマージしています。(以下のコマンドと同じ意味です)

  • $ git fetch origin master
  • $ git merge origin/master

参考資料

サル先生のGit入門〜バージョン管理を使いこなそう〜【プロジェクト管理ツールBacklog】
ようこそ、サル先生のGit入門へ。Gitをつかってバージョン管理ができるようになるために一緒に勉強していきましょう!
[git] 戻したい時よく使っているコマンドまとめ - Qiita
はじめにコミットのバージョンを戻す、ステージングしたものを編集内容ごと取り消す、ファイルのステージングを取り下げる...と戻すにも色々あります。整理も兼ねて業務でよく使っているコマンドをまとめま…