はじめに
gitコマンドを、使用頻度別にまとめました。日々の基本操作からブランチ運用、コミット履歴の確認、うっかりミスの取り消し方まで、実務でよく使う範囲を中心に整理しています。
ghコマンド(GitHub公式CLI)とは別物です。gitはバージョン管理そのものを行う本体のコマンドで、GitHub以外のホスティングサービスでも共通して使えます。ghはGitHubのAPIを叩いてPR作成・Issue操作・リポジトリ作成などGitHub固有の操作を行うための別ツールです。
本記事の見方
- 🔥:ほぼ毎日使う。反射的に打てるようにしておきたい
- ⭐:頻度は高くないが、覚えておくと役立つ
- 📝:知っていると便利な発展コマンド
- ⚠️:実行前に内容をよく確認すべき、注意が必要なコマンド
初期設定・準備
| 頻度 |
コマンド |
説明 |
| 🔥 |
git init |
カレントディレクトリを新規Gitリポジトリとして初期化 |
| 🔥 |
git clone <URL> |
リモートリポジトリを丸ごと複製してローカルに取得 |
| ⭐ |
git config --global user.name "名前" |
commitに記録されるユーザー名を設定 |
| ⭐ |
git config --global user.email "メール" |
commitに記録されるメールアドレスを設定 |
| 📝 |
git config --list |
現在の設定値を一覧表示 |
git clone https://github.com/user/repo.git # HTTPS経由でクローン
git clone git@github.com:user/repo.git # SSH鍵認証でクローン
git clone --depth 1 <URL> # 履歴を持たない浅いクローン(高速)
状態確認・差分確認
| 頻度 |
コマンド |
説明 |
| 🔥 |
git status |
変更済み・未追跡ファイルの状態を確認 |
| 🔥 |
git diff |
作業ディレクトリとインデックス(ステージ)の差分を表示 |
| 🔥 |
git diff --staged |
インデックスと直前のcommitとの差分を表示(--cachedも同義) |
| 🔥 |
git log |
コミット履歴を表示 |
| ⭐ |
git log --oneline |
履歴を1コミット1行で簡潔に表示 |
| ⭐ |
git log --graph --oneline --all |
ブランチの分岐・マージをグラフで可視化 |
| ⭐ |
git show <commit> |
特定のコミットの詳細内容(差分含む)を表示 |
| 📝 |
git blame <ファイル> |
ファイルの各行が最後に変更されたコミット・作者を表示 |
git log --oneline -10 # 直近10件だけ簡潔に表示
git diff HEAD~1 HEAD # 直前のコミットと1つ前のコミットの差分
git diff main feature-branch # 2つのブランチ間の差分
ステージング・コミット
| 頻度 |
コマンド |
説明 |
| 🔥 |
git add <ファイル> |
指定ファイルをステージ(コミット対象)に追加 |
| 🔥 |
git add . |
カレントディレクトリ以下の変更を全てステージに追加 |
| 🔥 |
git commit -m "メッセージ" |
ステージ済みの変更をコミット |
| ⭐ |
git commit -am "メッセージ" |
追跡済みファイルの変更をステージ追加とコミットを同時に実行(新規ファイルは対象外) |
| ⭐ |
git restore --staged <ファイル> |
ステージから外す(コミット対象から除外、変更内容は保持) |
| 📝 |
git commit --amend |
直前のコミットを、メッセージや追加変更ごと修正する |
git add src/*.py # 特定パターンのファイルだけステージ
git commit --amend -m "新しいメッセージ" # 直前のコミットメッセージを修正
git commit --amend --no-edit # メッセージは変えず、追加のステージ内容だけ直前コミットに含める
--amendはまだリモートにpushしていないコミットに対してのみ使うのが安全です。push済みのコミットを書き換えると、他の人の履歴と食い違いが生じます。
ブランチ操作
| 頻度 |
コマンド |
説明 |
| 🔥 |
git branch |
ローカルブランチの一覧を表示(現在地に*が付く) |
| 🔥 |
git switch <ブランチ名> |
指定ブランチに切り替える(新しいcheckoutの代替コマンド) |
| 🔥 |
git switch -c <新ブランチ名> |
新規ブランチを作成して同時に切り替える |
| 🔥 |
git merge <ブランチ名> |
指定ブランチを現在のブランチに取り込む |
| ⭐ |
git branch -d <ブランチ名> |
マージ済みのブランチを削除 |
| ⭐ |
git branch -D <ブランチ名> |
未マージでも強制的にブランチを削除 |
| ⭐ |
git branch -a |
リモート追跡ブランチも含めて全ブランチを表示 |
| 📝 |
git checkout <ブランチ名> |
ブランチ切り替え(従来の書き方、switch登場前からの互換コマンド) |
| 📝 |
git rebase <ブランチ名> |
現在のブランチのコミットを、指定ブランチの先端に付け替える |
git switch -c feature/login-page # 新規ブランチを作って移動
git switch main # mainブランチに戻る
git merge feature/login-page # feature/login-pageをmainに取り込む
rebaseは履歴を書き換える操作です。すでに他の人とpush/pullで共有済みのブランチに対しては使わないのが基本です(履歴の食い違いによるトラブルの元になります)。自分のローカル作業ブランチを整理する用途に留めましょう。
リモート操作
| 頻度 |
コマンド |
説明 |
| 🔥 |
git push |
ローカルのコミットをリモートリポジトリに反映 |
| 🔥 |
git push -u origin <ブランチ名> |
初回push時に、リモートブランチとの追跡関係も同時に設定 |
| 🔥 |
git pull |
リモートの変更を取得し、現在のブランチに取り込む(fetch+merge相当) |
| ⭐ |
git fetch |
リモートの変更情報を取得するだけ(自動マージはしない) |
| ⭐ |
git remote -v |
設定されているリモートリポジトリの一覧を表示 |
| 📝 |
git pull --rebase |
pull時にmergeではなくrebaseで取り込む(履歴を直線的に保ちたい場合) |
| 📝 |
git remote add origin <URL> |
リモートリポジトリを新規に登録する |
git push -u origin feature/login-page # 初回push(以降は git push だけでOKになる)
git fetch origin # リモートの最新情報だけ取得(作業内容には影響しない)
取り消し・やり直し系(要注意コマンド)
| 頻度 |
コマンド |
説明 |
| 🔥 |
git restore <ファイル> |
作業ディレクトリの変更を、直前のコミット時点の状態に戻す(未ステージの変更を破棄) |
| ⭐ |
git revert <commit> |
指定コミットの変更を打ち消す新しいコミットを作成する(履歴は消さない、安全な取り消し方) |
| ⭐⚠️ |
git reset --soft <commit> |
指定コミットまで戻すが、変更内容はステージ済みのまま保持する |
| ⭐⚠️ |
git reset --mixed <commit> |
指定コミットまで戻し、変更内容はステージ解除した状態で保持する(--mixedはデフォルト) |
| ⚠️ |
git reset --hard <commit> |
指定コミットまで戻し、それ以降の変更内容を完全に破棄する(復元困難) |
| 📝 |
git stash |
作業中の変更を一時的に退避する(コミットせずに別ブランチへ切り替えたい時など) |
| 📝 |
git stash pop |
退避した変更を作業ディレクトリに戻す |
git revert HEAD # 直前のコミットの内容を打ち消す新規コミットを作る(公開履歴向けの安全な取り消し)
git reset --hard HEAD~1 # 直前のコミット自体をなかったことにする(ローカルのみ、変更内容も消える)
git stash # 今の変更を一旦退避
git stash pop # 退避した変更を復元
git reset --hardは、コミットされていない変更を問答無用で完全に消去します。実行前にgit status・git diffで本当に不要な変更かを必ず確認してください。特に共有ブランチで実行すると、他の人の作業にも影響が及ぶ可能性があります。
タグ
| 頻度 |
コマンド |
説明 |
| ⭐ |
git tag |
既存のタグ一覧を表示 |
| ⭐ |
git tag <タグ名> |
現在のコミットにタグを付ける(軽量タグ) |
| 📝 |
git tag -a <タグ名> -m "メッセージ" |
メッセージ付きの注釈タグを作成(リリースバージョン管理などで推奨) |
| 📝 |
git push origin <タグ名> |
作成したタグをリモートに反映(タグはgit pushだけでは送られない) |
git tag -a v1.0.0 -m "初回リリース"
git push origin v1.0.0
git push origin --tags # ローカルの全タグをまとめてpush
.gitignore・トラブルシューティング系
| 頻度 |
コマンド |
説明 |
| ⭐ |
git rm --cached <ファイル> |
Gitの追跡対象からは外すが、実ファイルは削除しない(後から.gitignoreに追加したい時に使う) |
| 📝 |
git clean -n |
.gitignore未対象の未追跡ファイルを、削除せず一覧表示(ドライラン) |
| 📝 |
git clean -f |
未追跡ファイルを実際に削除する(-nで確認してから実行推奨) |
| 📝 |
git update-index --chmod=+x <ファイル> |
ファイルの実行権限フラグをGit管理上で立てる(シェルスクリプト等をcloneし直しても実行可能なままにしたい場合) |
git rm --cached .env # 誤って追跡してしまった.envをGit管理から除外
git clean -n # 削除される予定のファイルを確認
git clean -fd # 未追跡ファイル・ディレクトリを実際に削除
まとめ:迷ったときの基本フロー
git status # 1. 今の状態を確認
git diff # 2. 変更内容を確認
git add . # 3. ステージに追加
git commit -m "..." # 4. コミット
git push # 5. リモートに反映
これにgit switch -cでのブランチ作成、git pullでの最新化を組み合わせれば、日常的なGit操作の大半はカバーできます。
参考