はじめに
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推奨 |
前提条件として、以下の知識があることを想定しています。
- コマンドライン操作の基礎知識(
cd、ls/dir、mkdir等) - テキストエディタの基本操作
Gitのインストールがまだの場合は、公式サイトからダウンロードしてインストールを完了させてください。
Gitの基本コマンド概要
Gitでファイルの変更履歴を管理するには、主に以下の5つのコマンドを使用します。
| コマンド | 用途 | 使用頻度 |
|---|---|---|
git init |
リポジトリの初期化 | プロジェクト開始時のみ |
git add |
変更をステージングエリアに追加 | 非常に高い |
git commit |
変更を履歴として記録 | 非常に高い |
git status |
リポジトリの状態確認 | 非常に高い |
git log |
コミット履歴の閲覧 | 高い |
これらのコマンドを使いこなすことで、Gitによるバージョン管理の基本的なワークフローを実行できるようになります。
git init - リポジトリの初期化
git initは、現在のディレクトリをGitリポジトリとして初期化するコマンドです。プロジェクトでGitを使い始める際に最初に実行します。
基本的な使い方
|
|
実行すると、以下のようなメッセージが表示されます。
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に設定することが推奨されています。
|
|
既存のリポジトリのブランチ名を変更する場合は、以下のコマンドを使用します。
|
|
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ディレクトリ) |
基本的な使い方
|
|
git add . と git add -A の違い
両者の違いを理解しておくことは重要です。
| コマンド | 新規ファイル | 変更ファイル | 削除ファイル | 対象範囲 |
|---|---|---|---|---|
git add . |
追加する | 追加する | 追加する | カレントディレクトリ以下 |
git add -A |
追加する | 追加する | 追加する | リポジトリ全体 |
Git 2.x以降では、git add .もカレントディレクトリ以下の削除されたファイルを追跡するようになりました。主な違いは対象範囲のみです。
部分的なステージング(インタラクティブモード)
ファイル内の一部の変更のみをステージングしたい場合は、-pオプションを使用します。
|
|
インタラクティブモードでは、各変更(hunk)に対して以下のアクションを選択できます。
| キー | アクション |
|---|---|
y |
このhunkをステージングする |
n |
このhunkをステージングしない |
s |
hunkをより小さく分割する |
e |
hunkを手動で編集する |
q |
終了する |
? |
ヘルプを表示する |
ステージングの取り消し
誤ってステージングした場合は、git restore --stagedで取り消せます。
|
|
git commit - 変更の記録
git commitは、ステージングエリアの変更をリポジトリに記録するコマンドです。各コミットには一意のハッシュ値が割り当てられ、プロジェクトの特定時点のスナップショットとして保存されます。
基本的な使い方
|
|
コミットの内部構造
各コミットは以下の情報を含んでいます。
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オプションを使用します。
|
|
注意点として、--amendはコミット履歴を書き換えるため、すでにリモートにプッシュしたコミットに対して使用する場合は注意が必要です。
git status - リポジトリの状態確認
git statusは、リポジトリの現在の状態を確認するコマンドです。どのファイルが変更されているか、どのファイルがステージングされているかを一目で確認できます。
基本的な使い方
|
|
出力の読み方
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は、リポジトリのコミット履歴を表示するコマンドです。過去の変更内容を確認したり、特定のコミットを探したりする際に使用します。
基本的な使い方
|
|
出力の読み方
|
|
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" |
よく使う表示形式
|
|
特定のファイルの履歴を確認
|
|
.gitignoreの設定
.gitignoreは、Gitで追跡しないファイルやディレクトリを指定するための設定ファイルです。ビルド成果物、依存パッケージ、機密情報などを管理対象外にする際に使用します。
基本的な書き方
リポジトリのルートディレクトリに.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
すべてのリポジトリで共通して無視したいファイルは、グローバル設定として登録できます。
|
|
# ~/.gitignore_global
# OS生成ファイル
.DS_Store
.DS_Store?
._*
.Spotlight-V100
.Trashes
Thumbs.db
ehthumbs.db
# エディタ
*.swp
*.swo
*~
.idea/
.vscode/
既に追跡されているファイルを無視する
.gitignoreに追加しても、すでにGitで追跡されているファイルは無視されません。追跡を解除するには、以下のコマンドを使用します。
|
|
コミットメッセージの書き方
適切なコミットメッセージは、プロジェクトの履歴を理解しやすくし、チーム開発を円滑にします。
コミットメッセージの基本構造
<種別>: <要約>(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:.gitignoreの設定
|
|
ステップ4:状態確認とステージング
|
|
出力結果:
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)
|
|
出力結果:
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:コミット
|
|
出力結果:
[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:履歴の確認
|
|
出力結果:
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のユーザー情報が設定されていない
- 指示に従って名前とメールアドレスを設定する
|
|
エラー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によるバージョン管理の基礎が身につきます。次のステップとして、ブランチ操作やリモートリポジトリとの連携について学ぶことで、チーム開発に必要なスキルを身につけることができます。
日々の開発でこれらのコマンドを意識的に使い、適切なコミットメッセージを書く習慣をつけることで、プロジェクトの履歴管理が格段に向上します。