はじめに

Gitをインストールしたものの、どのコマンドから覚えればいいかわからない。そんな悩みを抱えている方は多いのではないでしょうか。

本記事では、Gitの基本コマンドを体系的に解説します。リポジトリの初期化からファイルのステージング、コミット、履歴確認まで、日常的に使用する主要なコマンドを実践例とともに紹介します。この記事を読み終えると、以下のことができるようになります。

  • git initでリポジトリを初期化できる
  • git addで変更をステージングエリアに追加できる
  • git commitで変更履歴を記録できる
  • git statusでリポジトリの状態を確認できる
  • git logでコミット履歴を閲覧できる
  • .gitignoreで管理対象外ファイルを設定できる
  • 適切なコミットメッセージを書ける

実行環境と前提条件

本記事の内容は、以下の環境で動作確認を行っています。

項目 要件
Git 2.40以上
OS Windows 10/11、macOS 12以上、Ubuntu 22.04以上
ターミナル コマンドプロンプト、PowerShell、Terminal.app、bash等
エディタ VS Code推奨

前提条件として、以下の知識があることを想定しています。

  • コマンドライン操作の基礎知識(cdls/dirmkdir等)
  • テキストエディタの基本操作

Gitのインストールがまだの場合は、公式サイトからダウンロードしてインストールを完了させてください。

Gitの基本コマンド概要

Gitでファイルの変更履歴を管理するには、主に以下の5つのコマンドを使用します。

コマンド 用途 使用頻度
git init リポジトリの初期化 プロジェクト開始時のみ
git add 変更をステージングエリアに追加 非常に高い
git commit 変更を履歴として記録 非常に高い
git status リポジトリの状態確認 非常に高い
git log コミット履歴の閲覧 高い

これらのコマンドを使いこなすことで、Gitによるバージョン管理の基本的なワークフローを実行できるようになります。

git init - リポジトリの初期化

git initは、現在のディレクトリをGitリポジトリとして初期化するコマンドです。プロジェクトでGitを使い始める際に最初に実行します。

基本的な使い方

1
2
3
4
5
6
# プロジェクトディレクトリを作成して移動
mkdir my-project
cd my-project

# Gitリポジトリを初期化
git init

実行すると、以下のようなメッセージが表示されます。

Initialized empty Git repository in /path/to/my-project/.git/

初期化後のディレクトリ構造

git initを実行すると、.gitという隠しディレクトリが作成されます。このディレクトリには、Gitがバージョン管理に必要なすべての情報が格納されています。

my-project/
├── .git/           # Gitの管理情報(通常は編集しない)
│   ├── config      # リポジトリ固有の設定
│   ├── HEAD        # 現在のブランチへの参照
│   ├── hooks/      # フック用スクリプト
│   ├── objects/    # Gitオブジェクト(コミット、ツリー、blob)
│   └── refs/       # ブランチやタグへの参照
└── (プロジェクトファイル)

初期ブランチ名の設定

Git 2.28以降では、初期ブランチ名をmainに設定することが推奨されています。

1
2
3
4
5
# 初期ブランチ名をmainに設定(グローバル設定)
git config --global init.defaultBranch main

# その後にgit initを実行
git init

既存のリポジトリのブランチ名を変更する場合は、以下のコマンドを使用します。

1
2
# 現在のブランチ名をmainに変更
git branch -m main

git add - ステージングエリアへの追加

git addは、作業ディレクトリの変更をステージングエリア(インデックス)に追加するコマンドです。コミットする前の準備段階として使用します。

Gitの3つのエリアを理解する

Gitでファイルを管理する際、以下の3つのエリアを意識することが重要です。

flowchart LR
    A["作業ディレクトリ<br>(Working Tree)"] -->|git add| B["ステージングエリア<br>(Index)"]
    B -->|git commit| C["リポジトリ<br>(.git)"]
    C -->|git checkout / git restore| A
エリア 説明
作業ディレクトリ 実際にファイルを編集する場所
ステージングエリア 次のコミットに含める変更を準備する場所
リポジトリ コミット履歴が保存される場所(.gitディレクトリ)

基本的な使い方

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
# 特定のファイルをステージング
git add index.html

# 複数のファイルをステージング
git add index.html style.css script.js

# 特定のディレクトリ内のすべてのファイルをステージング
git add src/

# カレントディレクトリ以下のすべての変更をステージング
git add .

# リポジトリ全体のすべての変更をステージング
git add -A

git add . と git add -A の違い

両者の違いを理解しておくことは重要です。

コマンド 新規ファイル 変更ファイル 削除ファイル 対象範囲
git add . 追加する 追加する 追加する カレントディレクトリ以下
git add -A 追加する 追加する 追加する リポジトリ全体

Git 2.x以降では、git add .もカレントディレクトリ以下の削除されたファイルを追跡するようになりました。主な違いは対象範囲のみです。

部分的なステージング(インタラクティブモード)

ファイル内の一部の変更のみをステージングしたい場合は、-pオプションを使用します。

1
2
3
4
5
# 変更を確認しながら選択的にステージング
git add -p

# 特定のファイルの変更を確認しながらステージング
git add -p index.html

インタラクティブモードでは、各変更(hunk)に対して以下のアクションを選択できます。

キー アクション
y このhunkをステージングする
n このhunkをステージングしない
s hunkをより小さく分割する
e hunkを手動で編集する
q 終了する
? ヘルプを表示する

ステージングの取り消し

誤ってステージングした場合は、git restore --stagedで取り消せます。

1
2
3
4
5
# 特定のファイルのステージングを取り消す
git restore --staged index.html

# すべてのステージングを取り消す
git restore --staged .

git commit - 変更の記録

git commitは、ステージングエリアの変更をリポジトリに記録するコマンドです。各コミットには一意のハッシュ値が割り当てられ、プロジェクトの特定時点のスナップショットとして保存されます。

基本的な使い方

1
2
3
4
5
6
7
8
# コミットメッセージを指定してコミット
git commit -m "初期コミット"

# エディタでコミットメッセージを編集してコミット
git commit

# ステージングとコミットを同時に実行(追跡済みファイルのみ)
git commit -am "変更内容の説明"

コミットの内部構造

各コミットは以下の情報を含んでいます。

commit 8a7b9c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b
Author: Your Name <your.email@example.com>
Date:   Wed Jan 1 12:00:00 2026 +0900

    コミットメッセージ

    - 変更の詳細説明
    - 関連するissue番号など
要素 説明
コミットハッシュ 40文字のSHA-1ハッシュ値(一意の識別子)
Author コミット作成者の名前とメールアドレス
Date コミット作成日時
メッセージ 変更内容の説明

コミットの修正

直前のコミットを修正したい場合は、--amendオプションを使用します。

1
2
3
4
5
6
# 直前のコミットメッセージを修正
git commit --amend -m "修正後のメッセージ"

# ファイルを追加して直前のコミットを修正
git add forgotten-file.txt
git commit --amend --no-edit

注意点として、--amendはコミット履歴を書き換えるため、すでにリモートにプッシュしたコミットに対して使用する場合は注意が必要です。

git status - リポジトリの状態確認

git statusは、リポジトリの現在の状態を確認するコマンドです。どのファイルが変更されているか、どのファイルがステージングされているかを一目で確認できます。

基本的な使い方

1
2
3
4
5
6
7
8
# リポジトリの状態を確認
git status

# 短縮形式で表示
git status -s

# ブランチ情報も含めて短縮形式で表示
git status -sb

出力の読み方

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:   newfile.txt
        modified:   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:   style.css

Untracked files:
  (use "git add <file>..." to include in what will be committed)
        temp.log
セクション 説明
Changes to be committed ステージング済み(次のコミットに含まれる)
Changes not staged for commit 変更済みだがステージングされていない
Untracked files Gitで追跡されていない新規ファイル

短縮形式の読み方

git status -sの出力は、2文字のステータスコードで状態を表します。

M  index.html      # ステージング済みの変更
 M style.css       # ステージングされていない変更
MM app.js          # ステージング済み+さらに変更あり
A  newfile.txt     # 新規追加(ステージング済み)
?? temp.log        # 追跡されていないファイル
D  deleted.txt     # 削除(ステージング済み)
左列 右列 意味
M ステージング済みの変更
M ステージングされていない変更
A 新規追加(ステージング済み)
D 削除(ステージング済み)
? ? 追跡されていないファイル

git log - コミット履歴の閲覧

git logは、リポジトリのコミット履歴を表示するコマンドです。過去の変更内容を確認したり、特定のコミットを探したりする際に使用します。

基本的な使い方

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
# コミット履歴を表示
git log

# 1行形式で表示
git log --oneline

# 最新の5件のみ表示
git log -n 5
git log -5

# グラフ形式で表示(ブランチの分岐・マージを視覚化)
git log --graph --oneline --all

出力の読み方

1
git log
commit 8a7b9c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b (HEAD -> main)
Author: Your Name <your.email@example.com>
Date:   Wed Jan 1 12:00:00 2026 +0900

    ヘッダーのデザインを更新

commit 1a2b3c4d5e6f7a8b9c0d1e2f3a4b5c6d7e8f9a0b
Author: Your Name <your.email@example.com>
Date:   Tue Dec 31 18:00:00 2025 +0900

    初期コミット

便利なオプション

オプション 説明 使用例
--oneline 1行形式で表示 git log --oneline
--graph ブランチをグラフ表示 git log --graph
--all 全ブランチを表示 git log --all
-p 差分も表示 git log -p
--stat 変更ファイルの統計を表示 git log --stat
--author 特定の作成者でフィルタ git log --author="Name"
--since 指定日以降のコミット git log --since="2026-01-01"
--grep メッセージで検索 git log --grep="fix"

よく使う表示形式

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# 見やすい1行表示(ハッシュ短縮 + メッセージ)
git log --oneline

# グラフ付き詳細表示
git log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit

# エイリアスとして登録すると便利
git config --global alias.lg "log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"

# 登録後は git lg で使用可能
git lg

特定のファイルの履歴を確認

1
2
3
4
5
# 特定のファイルの変更履歴
git log -- index.html

# 特定のファイルの変更内容も表示
git log -p -- index.html

.gitignoreの設定

.gitignoreは、Gitで追跡しないファイルやディレクトリを指定するための設定ファイルです。ビルド成果物、依存パッケージ、機密情報などを管理対象外にする際に使用します。

基本的な書き方

リポジトリのルートディレクトリに.gitignoreファイルを作成します。

1
2
# .gitignoreファイルを作成
touch .gitignore
# コメントは#で始める

# 特定のファイルを無視
secret.txt
config.local.json

# 特定の拡張子を無視
*.log
*.tmp
*.bak

# 特定のディレクトリを無視
node_modules/
dist/
build/
.cache/

# ディレクトリ内の特定ファイルを無視
logs/*.log

# 再帰的にマッチ
**/temp/

# 否定パターン(無視しない)
!important.log

パターン記法

パターン 説明 マッチ例
file.txt 任意の場所のfile.txt file.txt, src/file.txt
/file.txt ルート直下のfile.txtのみ file.txtのみ
dir/ dirディレクトリ全体 dir/とその中身すべて
*.log .log拡張子のファイル app.log, error.log
**/temp 任意の階層のtemp temp/, src/temp/
!file.txt file.txtは無視しない (否定パターン)

言語・フレームワーク別の.gitignore例

Node.js プロジェクト

# Dependencies
node_modules/

# Build output
dist/
build/

# Environment variables
.env
.env.local
.env.*.local

# Logs
logs/
*.log
npm-debug.log*

# Editor directories
.vscode/
.idea/

# OS files
.DS_Store
Thumbs.db

Python プロジェクト

# Byte-compiled files
__pycache__/
*.py[cod]
*$py.class

# Virtual environment
venv/
.venv/
ENV/

# Distribution
dist/
build/
*.egg-info/

# IDE
.idea/
.vscode/
*.swp

# Environment variables
.env

グローバル.gitignore

すべてのリポジトリで共通して無視したいファイルは、グローバル設定として登録できます。

1
2
3
4
5
# グローバル.gitignoreファイルを作成
touch ~/.gitignore_global

# グローバル設定として登録
git config --global core.excludesfile ~/.gitignore_global
# ~/.gitignore_global
# OS生成ファイル
.DS_Store
.DS_Store?
._*
.Spotlight-V100
.Trashes
Thumbs.db
ehthumbs.db

# エディタ
*.swp
*.swo
*~
.idea/
.vscode/

既に追跡されているファイルを無視する

.gitignoreに追加しても、すでにGitで追跡されているファイルは無視されません。追跡を解除するには、以下のコマンドを使用します。

1
2
3
4
5
6
7
8
9
# ファイルをGitの追跡から除外(ファイル自体は残る)
git rm --cached secret.txt

# ディレクトリを再帰的に追跡から除外
git rm -r --cached node_modules/

# .gitignoreの変更をコミット
git add .gitignore
git commit -m ".gitignoreを更新し、追跡対象から除外"

コミットメッセージの書き方

適切なコミットメッセージは、プロジェクトの履歴を理解しやすくし、チーム開発を円滑にします。

コミットメッセージの基本構造

<種別>: <要約>(50文字以内)

<本文>(任意、72文字で折り返し)
詳細な説明や変更の理由を記述

<フッター>(任意)
関連するIssue番号など

プレフィックス(種別)の例

一貫性のあるプレフィックスを使用することで、変更の種類が一目でわかるようになります。

プレフィックス 用途
feat: 新機能の追加 feat: ユーザー認証機能を追加
fix: バグ修正 fix: ログイン時のエラーを修正
docs: ドキュメントの変更 docs: READMEを更新
style: コードスタイルの変更 style: インデントを修正
refactor: リファクタリング refactor: 認証ロジックを整理
test: テストの追加・修正 test: ユーザー登録のテストを追加
chore: ビルド・ツールの変更 chore: 依存パッケージを更新

良いコミットメッセージの例

feat: ユーザープロフィール編集機能を追加

- プロフィール画像のアップロード機能
- 自己紹介文の編集機能
- SNSリンクの登録機能

Closes #123
fix: パスワードリセット時のメール送信エラーを修正

SMTPサーバーへの接続タイムアウトが短すぎたため、
低速なネットワーク環境でメール送信に失敗していた。
タイムアウト値を30秒に変更。

Fixes #456

避けるべきコミットメッセージ

以下のようなメッセージは避けましょう。

悪い例 理由
fix 何を修正したかわからない
update 何を更新したかわからない
作業中 意味のある単位でコミットすべき
色々修正 複数の変更は分割してコミットすべき

コミットのベストプラクティス

  1. 意味のある単位でコミットする: 1つのコミットには1つの変更のみを含める
  2. 動作する状態でコミットする: ビルドエラーやテスト失敗を含むコミットは避ける
  3. 現在形で書く: 「追加した」ではなく「追加」と記述する
  4. 理由を説明する: 何を変えたかだけでなく、なぜ変えたかも記述する

実践:プロジェクトの初期化からコミットまで

ここまで学んだコマンドを使って、実際にプロジェクトを初期化し、最初のコミットを行う流れを確認しましょう。

ステップ1:プロジェクトの作成と初期化

1
2
3
4
5
6
# プロジェクトディレクトリを作成
mkdir my-website
cd my-website

# Gitリポジトリを初期化
git init

ステップ2:ファイルの作成

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
# HTMLファイルを作成
echo '<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <title>My Website</title>
</head>
<body>
    <h1>Welcome</h1>
</body>
</html>' > index.html

# CSSファイルを作成
echo 'body {
    font-family: sans-serif;
    margin: 0;
    padding: 20px;
}' > style.css

ステップ3:.gitignoreの設定

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
# .gitignoreを作成
echo '# OS生成ファイル
.DS_Store
Thumbs.db

# エディタ設定
.vscode/
.idea/

# 一時ファイル
*.tmp
*.log' > .gitignore

ステップ4:状態確認とステージング

1
2
# 現在の状態を確認
git status

出力結果:

On branch main

No commits yet

Untracked files:
  (use "git add <file>..." to include in what will be committed)
        .gitignore
        index.html
        style.css

nothing added to commit but untracked files present (use "git add" to track)
1
2
3
4
5
# すべてのファイルをステージング
git add .

# ステージング後の状態を確認
git status

出力結果:

On branch main

No commits yet

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)
        new file:   .gitignore
        new file:   index.html
        new file:   style.css

ステップ5:コミット

1
2
3
4
5
6
# 初期コミット
git commit -m "feat: プロジェクトを初期化

- index.htmlを作成
- style.cssを作成
- .gitignoreを設定"

出力結果:

[main (root-commit) a1b2c3d] feat: プロジェクトを初期化
 3 files changed, 20 insertions(+)
 create mode 100644 .gitignore
 create mode 100644 index.html
 create mode 100644 style.css

ステップ6:履歴の確認

1
2
# コミット履歴を確認
git log --oneline

出力結果:

a1b2c3d (HEAD -> main) feat: プロジェクトを初期化

よくあるエラーと対処法

エラー1:nothing to commit

On branch main
nothing to commit, working tree clean

原因と対処法:

  • ステージングされた変更がない状態でコミットしようとしている
  • git addでファイルをステージングしてからコミットする

エラー2:Please tell me who you are

*** Please tell me who you are.

Run

  git config --global user.email "you@example.com"
  git config --global user.name "Your Name"

原因と対処法:

  • Gitのユーザー情報が設定されていない
  • 指示に従って名前とメールアドレスを設定する
1
2
git config --global user.name "Your Name"
git config --global user.email "you@example.com"

エラー3:fatal: not a git repository

fatal: not a git repository (or any of the parent directories): .git

原因と対処法:

  • Gitリポジトリとして初期化されていないディレクトリでGitコマンドを実行している
  • git initでリポジトリを初期化するか、正しいディレクトリに移動する

まとめ

本記事では、Gitの基本コマンドについて解説しました。

コマンド 役割
git init リポジトリの初期化
git add 変更をステージングエリアに追加
git commit 変更を履歴として記録
git status リポジトリの状態確認
git log コミット履歴の閲覧

これらのコマンドを習得することで、Gitによるバージョン管理の基礎が身につきます。次のステップとして、ブランチ操作やリモートリポジトリとの連携について学ぶことで、チーム開発に必要なスキルを身につけることができます。

日々の開発でこれらのコマンドを意識的に使い、適切なコミットメッセージを書く習慣をつけることで、プロジェクトの履歴管理が格段に向上します。

参考リンク