
本記事の目的
本記事は、バージョン管理システムGitと、コラボレーションプラットフォームGitHubを、体系的に学び、実践的に使いこなすためのガイドです。
あなたがGitユーザーとして、チームの生産性とコードの品質をリードできる、信頼される開発者へと成長することができる情報を提供します。
この章では、Gitを使ってファイルの変更履歴を管理するための、最も基本的で重要な操作を学びます。
プログラミングのコードやドキュメントなど、あらゆるファイルの「セーブポイント」を作成し、いつでも過去の状態に戻せるようにする、「タイムマシン」の操作方法を学びましょう。
目次
対象読者
本書は、以下のような幅広い読者を対象としています。
- GitやGitHubをこれから学びたい、あるいは学び始めたばかりの学生や初学者の方
- 黒い画面(ターミナル)に抵抗がある方でも、一つひとつのコマンドの意味と目的を理解しながら、着実にステップアップできます。
- 自己流でGitを使ってきたが、チーム開発の経験は浅いエンジニアの方
- Pull Requestの作成、コードレビュー、コンフリクトの解決といった、共同作業で必須となる作法を体系的に学び直したい方に最適です。
- GitHubの便利な機能を使いこなし、開発プロセスを改善したい中級者の方
- GitHub ActionsによるCI/CDの構築、セキュリティ機能の導入、CODEOWNERSによる責任範囲の明確化など、チームの生産性と安全性を向上させるための具体的な手法を学べます。
- エンジニアと協業する非エンジニア職(デザイナー、プロジェクトマネージャー、テクニカルライター等)の方
- 開発チームがどのようなツールとプロセスで仕事を進めているのかを理解し、より円滑なコミュニケーションとコラボレーションを実現するための知識を得られます。
操作の概要
まず、自分のPC上にGitリポジトリを準備します。リポジトリは変更履歴を保管するデータベース、「倉庫」をイメージするとわかりやすいです。
リポジトリを作る方法は2つあります。全く新しいプロジェクトのために空のリポジトリを作るか、GitHubなどにある既存のプロジェクトを丸ごとコピーしてリポジトリを手に入れるかとなります。
GitとGithubの導入手順については、以下の記事で詳細に解説していますので、導入が終わっていない方は、記事を見て導入してみてください。
リポジトリが準備できたら、以下のサイクルを繰り返して変更履歴を記録していきます。
- ファイルの変更・作成
- 変更内容の確認 (
git status
,git diff
) - 記録したい変更を選択 (
git add
) - メッセージを付けて記録 (
git commit
) - 記録履歴の確認 (
git log
)
このサイクルが、Gitを使った開発の基本となります。各操作の事例と実行手順で詳細をご覧ください。
コマンドごとの利用事例と実行手順
1. git init
:新しいリポジトリを作成する
概要
新しいプロジェクトを開始する際に、そのディレクトリをGitの管理下に置くためのコマンドです。
実行すると、.git
という隠しディレクトリが作成され、ここに変更履歴などがすべて保存されます。
利用事例
- これから新しいWebサイトなどのプログラム開発を始めたい。
- 学習用のプログラムを書いて、その変更の履歴を記録したい。
実行手順
- ターミナル(WindowsではコマンドプロンプトやPowerShell)を開きます。
- プロジェクト用の新しいディレクトリを作成し、そこに移動します。
bash # "my-project" という名前のディレクトリを作成 mkdir my-project # 作成したディレクトリに移動 cd my-project
git init
コマンドを実行します。bash git init
- 「Initialized empty Git repository in …/.git/」のようなメッセージが表示されれば成功です。
実行例
コマンドの実行例:プロジェクトフォルダの作成と初期化
hogehoge@mac repo % mkdir my-project
hogehoge@mac repo % cd my-project
hogehoge@mac my-project % git init
hint: Using 'master' as the name for the initial branch. This default branch name
hint: is subject to change. To configure the initial branch name to use in all
hint: of your new repositories, which will suppress this warning, call:
hint:
hint: git config --global init.defaultBranch <name>
hint:
hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
hint: 'development'. The just-created branch can be renamed via this command:
hint:
hint: git branch -m <name>
hint:
hint: Disable this message with "git config set advice.defaultBranchName false"
Initialized empty Git repository in /Users/hogehoge/repo/my-project/.git/
hogehoge@mac my-project %
コマンドの実行例:プロジェクトフォルダの一覧
hogehoge@mac my-project % ls -la
total 0
drwxr-xr-x 3 hogehoge staff 96 Sep 6 16:23 .
drwxr-xr-x 4 hogehoge staff 128 Sep 6 16:23 ..
drwxr-xr-x 9 hogehoge staff 288 Sep 6 16:23 .git
hogehoge@mac my-project %
.git
ディレクトリの内部構造解説
.git
ディレクトリは、Gitリポジトリのすべての情報と履歴を格納する「心臓部」です。あなたがgit
コマンドを実行するたびに、Gitはこのディレクトリ内のファイルを読み書きしています。.git
ディレクトリに格納されているフォルダやファイルの解説を以下に示します。
ファイル/ディレクトリ名 | 役割・概要 | 詳細・補足 |
---|---|---|
HEAD | 現在の場所を示すポインタ | 通常はref: refs/heads/main のように、現在チェックアウトしているブランチへの参照が記録されています。これにより、Gitは現在のブランチの最新コミットを把握します。 |
config | リポジトリ固有の設定ファイル | このリポジトリ専用の設定がキーバリュー形式で保存されます。リモートリポジトリのURL ([remote "origin"] )、ブランチの追跡設定 ([branch "main"] )、ユーザー名/Emailなどが含まれます。この設定は、システム全体やグローバルの設定 (~/.gitconfig ) よりも優先されます。 |
description | リポジトリの説明ファイル | 主にGitWebという古いWebインターフェースで使われる、リポジトリの概要を記述するためのファイルです。現在のGitHubやGitLabでは使用されておらず、通常は編集する必要はありません。 |
hooks | 特定のGit操作時に自動実行されるスクリプト | git commit の直前 (pre-commit ) や git push の直前 (pre-push ) など、特定のイベントをきっかけに自動で実行されるスクリプトを格納するディレクトリです。コードのフォーマットチェックやテストの自動実行などに利用されます。 |
info | リポジトリの補助的な情報 | 主にexclude ファイルが格納されています。このファイルは.gitignore とほぼ同じ役割を持ちますが、リポジトリで共有されず、個人の環境でのみ無視したいファイルを指定するために使われます。 |
objects | Gitオブジェクトデータベース本体 | Gitの全データ(コミット、ツリー、ブロブ)が格納される、リポジトリの最も重要な核となる部分です。オブジェクトは内容から算出されたSHA-1ハッシュをIDとして持ち、IDの最初の2文字がディレクトリ名、残りの38文字がファイル名として格納されます。 |
refs | 参照(ポインタ)の格納場所 | コミットのハッシュ値に対する、人間が読みやすい名前(ポインタ)を管理するディレクトリです。 ・ refs/heads/ : 各ローカルブランチの最新コミットを指すポインタがファイルとして格納されます。・ refs/tags/ : 各タグが指すコミットのポインタが格納されます。・ refs/remotes/ : リモート追跡ブランチ(例: origin/main )のポインタが格納されます。 |
参考情報:
- Pro Git Book – 10.1 Gitの内側 – 配管と磁器
Tips
すでにGitで管理されているディレクトリ(例えば、後述するgit clone
で作成したディレクトリ)の中でgit init
を実行しないようにしましょう。意図しないリポジトリの二重管理に繋がる可能性があります。
2. git clone
:既存のリポジトリをコピーする
概要
GitHubなどのリモートサーバー上にある既存のGitリポジトリを、自分のPCに丸ごと複製(クローン)するためのコマンドです。
利用事例
- 会社のプロジェクトに参加するため、GitHubにあるソースコードを手元にダウンロードしたい。
- オープンソースプロジェクトのコードを読んでみたい、あるいは貢献したい。
実行手順
- GitHubなどで、クローンしたいリポジトリのページを開きます。
- 「Code」ボタンをクリックし、表示されるURL(HTTPSまたはSSH)をコピーします。
- ターミナルで、リポジトリを置きたい場所に移動し、
git clone
コマンドを実行します。bash # コピーしたURLを貼り付ける(認証にPATを使っているケース) git clone https://github.com/git/git.git
- リポジトリ名のディレクトリが作成され、その中にすべてのファイルと履歴がダウンロードされます。
コマンドの実行例:認証にSSHキーを使っているケース
hogehoge@mac repo % git clone git@github.com:hogehoge/hello-world.git
Cloning into 'hello-world'...
Enter passphrase for key '/Users/hogehoge/.ssh/id_ed25519':
remote: Enumerating objects: 8, done.
remote: Counting objects: 100% (8/8), done.
remote: Compressing objects: 100% (6/6), done.
remote: Total 8 (delta 1), reused 7 (delta 0), pack-reused 0 (from 0)
Receiving objects: 100% (8/8), done.
Resolving deltas: 100% (1/1), done.
hogehoge@mac repo %
Tips
URLの末尾にディレクトリ名を指定すると、その名前でクローンできます。(例: git clone <URL> my-awesome-project
)
3. git status
:リポジトリの状態を確認する
概要
現在のリポジトリの「健康診断」をするようなコマンドです。変更されたがまだ記録されていないファイル、Gitに追跡されていない新しいファイルなどを一覧で表示してくれます。
利用事例
- コミット(記録)する前に、どのファイルに変更を加えたか確認したい。
- 作業を中断した後、どこまで進めたかを思い出すきっかけにしたい。
実行手順
リポジトリのディレクトリ内で、いつでも実行できます。
git status
コマンドの実行例:ファイルの作成とstatusの確認
hogehoge@mac hello-world % echo '<!DOCTYPE html><html><body><h1>Hello GitHub!</h1></body></html>' > index.html
hogehoge@mac hello-world % git status
On branch main
Your branch is up to date with 'origin/main'.
Untracked files:
(use "git add <file>..." to include in what will be committed)
index.html
nothing added to commit but untracked files present (use "git add" to track)
hogehoge@mac hello-world % vi README.md
hogehoge@mac hello-world % git status
On branch main
Your branch is up to date with 'origin/main'.
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: README.md
Untracked files:
(use "git add <file>..." to include in what will be committed)
index.html
no changes added to commit (use "git add" and/or "git commit -a")
hogehoge@mac hello-world %
Tips
表示されるメッセージは非常に重要です。
Changes not staged for commit
: ファイルが変更されたが、まだコミット対象として選択されていない状態。Changes to be committed
:git add
され、次のコミットに含まれる状態。Untracked files
: Gitがまだ管理対象として認識していない新しいファイル。
4. git add
:変更をステージングエリアに追加する
概要
コミットしたい変更内容を、「ステージングエリア」と呼ばれる待機場所に追加するコマンドです。「この変更を次のコミットに含めます」という意思表示にあたります。
利用事例
- いくつかのファイルを修正したが、そのうち特定のファイルだけを先にコミットしたい。
- 新しく作成したファイルを、Gitの管理対象に加えたい。
実行手順
- ファイルを変更または新規作成します。
git status
で変更を確認します。- コミットに含めたいファイルを
git add
で指定します。# 特定のファイルだけを追加 git add index.html # カレントディレクトリ以下のすべての変更を追加(便利ですが注意も必要) git add .
- 再度
git status
を実行し、ファイルが「Changes to be committed」セクションに移動したことを確認します。
コマンドの実行例:ファイルの作成とstatusの確認
hogehoge@mac hello-world % git status
On branch main
Your branch is up to date with 'origin/main'.
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: README.md
Untracked files:
(use "git add <file>..." to include in what will be committed)
index.html
no changes added to commit (use "git add" and/or "git commit -a")
hogehoge@mac hello-world % git add index.html
hogehoge@mac hello-world % git status
On branch main
Your branch is up to date with 'origin/main'.
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
new file: index.html
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: README.md
hogehoge@mac hello-world % git add README.md
hogehoge@mac hello-world % git status
On branch main
Your branch is up to date with 'origin/main'.
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
modified: README.md
new file: index.html
hogehoge@mac hello-world %
Tips
git add .
は、意図しないファイル(一時ファイルや設定ファイルなど)までステージングしてしまう可能性があります。どのファイルが対象になるか、事前にgit status
で確認する癖をつけましょう。
5. git commit
:変更をリポジトリに記録する
概要
ステージングエリアに追加された変更内容を、メッセージと共にリポジトリの履歴に正式に記録(コミット)します。これが「セーブポイント」を作成する行為です。
利用事例
- 「ログイン機能の実装」など、キリの良い作業単位で履歴を残したい。
実行手順
git add
でコミットしたい変更をステージングします。-m
オプションに続けて、コミットメッセージを引用符で囲んで指定します。
git commit -m "Webサイトのヘッダーを追加"
コマンドの実行例:ファイルの作成、ステージングとコミット
hogehoge@mac hello-world % echo '<!DOCTYPE html><html><body><h1>Hello GitHub!</h1></body></html>' > index.html
hogehoge@mac hello-world % git status
On branch main
Your branch is up to date with 'origin/main'.
Untracked files:
(use "git add <file>..." to include in what will be committed)
index.html
nothing added to commit but untracked files present (use "git add" to track)
hogehoge@mac hello-world % git add index.html
hogehoge@mac hello-world % git status
On branch main
Your branch is up to date with 'origin/main'.
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
new file: index.html
hogehoge@mac hello-world % git commit -m "Webサイトのヘッダーを追加"
[main 09a4a7d] Webサイトのヘッダーを追加
1 file changed, 1 insertion(+)
create mode 100644 index.html
hogehoge@mac hello-world % git status
On branch main
Your branch is ahead of 'origin/main' by 1 commit.
(use "git push" to publish your local commits)
nothing to commit, working tree clean
hogehoge@mac hello-world %
Tips
コミットメッセージは「何を変更したか」が後から誰でも分かるように、具体的かつ簡潔に書くことが重要です。良いコミットメッセージは、将来の自分やチームメンバーを助けます。
6. git diff
:変更差分を確認する
概要
まだステージングしていない変更が、前回コミットした状態からどのように変わったかを具体的に表示するコマンドです。
利用事例
- コミットする直前に、コードの変更内容に誤りがないか最終確認したい。
実行手順
リポジトリのディレクトリ内で実行します。
git diff
コマンドの実行例:ファイルの変更と未ステージングファイルの差分確認
hogehoge@mac hello-world % vi README.md
hogehoge@mac hello-world % git diff
**diff --git a/README.md b/README.md**
**index c54944b..6ee5d16 100644**
**--- a/README.md**
**+++ b/README.md**
@@ -1 +1,2 @@
# My First GitHub Repository
+add second line
hogehoge@mac hello-world %
コマンドの実行例:ファイルのステージングとステージングファイルの差分確認(上記の続き)
hogehoge@mac hello-world % git diff --staged
hogehoge@mac hello-world % git add README.md
hogehoge@mac hello-world % git diff
hogehoge@mac hello-world % git diff --staged
**diff --git a/README.md b/README.md**
**index c54944b..7495d7f 100644**
**--- a/README.md**
**+++ b/README.md**
@@ -1 +1,2 @@
# My First GitHub Repository
+add second line
hogehoge@mac hello-world %
注意点
git add
した後の変更差分を確認したい場合は、git diff --staged
(または --cached
)を使います。
7. git log
:コミット履歴を確認する
概要
これまでのコミット履歴を一覧で表示します。誰が、いつ、どのような変更を行ったかを確認できます。
利用事例
- 過去の変更内容を振り返りたい。
- 特定の変更がいつ行われたかを調査したい。
実行手順
リポジトリのディレクトリ内で実行します。
# すべての履歴を詳細に表示
git log
# 履歴を1行で簡潔に表示(おすすめ)
git log --oneline
コマンドの実行例:コミット履歴(詳細)
hogehoge@mac hello-world % git log
commit 19f8f2f9a1905676c916f82ee2962d5bfec3e725 (**HEAD** -> **main**, **origin/main**, **origin/HEAD**)
Author: hogehoge <hogehoge@example.com>
Date: Fri Sep 5 23:13:37 2025 +0900
Revert "feat: Add initial index file and Update README file"
This reverts commit 462a977947510779b69450c269147adb0d35dd50.
commit 462a977947510779b69450c269147adb0d35dd50
Author: hogehoge <hogehoge@example.com>
Date: Fri Sep 5 23:06:28 2025 +0900
feat: Add initial index file and Update README file
commit 97aea68fc6f8b0fb508eb79ea1262a21540562c7
Author: hogehoge <hogehoge@example.com>
Date: Fri Sep 5 22:19:53 2025 +0900
Initial commit
hogehoge@mac hello-world %
コマンドの実行例:コミット履歴(簡易)
hogehoge@mac hello-world % git log --oneline
19f8f2f (**HEAD** -> **main**, **origin/main**, **origin/HEAD**) Revert "feat: Add initial index file and Update README file"
462a977 feat: Add initial index file and Update README file
97aea68 Initial commit
hogehoge@mac hello-world %
Tips
q
キーを押すとログ表示を終了できます。
参考資料
より深く学習したい方は、以下の公式ドキュメントを参照することをお勧めします。
- Pro Git Book – Gitの基本
- https://git-scm.com/book/ja/v2/使い始める-Gitの基本
まとめ
まずはこの章のコマンドを実際に手を動かして試し、Gitの基本的な流れを掴んでください。
あなたのMacを快適な開発環境にしましょう!!