Gitコマンドは200以上あり、全て覚えるのは非現実的。実務で本当に使うのは40コマンド程度です。この記事では、開発シーン別に「これさえ知っていれば9割の状況で困らない」コマンドをコピペで使える形でまとめました。
単なるコマンド集ではなく、困った時にどの記事を見るかがわかる「Git作業の地図」として設計しています。初心者〜中級者が日常的にブックマークして使える実用性を最優先しました。古いgit checkout系ではなくGit 2.23+推奨のgit switch/git restoreを中心に記載しています。
この記事で学べること
- 緊急時の「やばい」→「このコマンド」の早見表
- 日常作業・ブランチ運用・リモート同期の定番コマンド
- 履歴確認とdiff(
git log/git diff)の実用オプション - 取り消し系(reset/revert/restore)の使い分け
- Git 2.23+推奨の
switch/restore(checkoutの置換) - 現代的な推奨設定一括スクリプト(2026年版)
- プロが使う便利エイリアス・調査コマンド
- 困った時の詳細記事への導線
【緊急時】「やばい」→「このコマンド」早見表
実務でもっとも焦るシチュエーションと、その対処コマンドを一覧にしました。詳しくは各リンク先へ。この表だけでもブックマークしておくと事故対応が速くなります。
ポイント:Gitのトラブルは原因パターンが限られているため、症状→コマンド→詳細記事の3ステップで多くが解決できます。この早見表をブックマークしておき、困ったら該当行の詳細記事で深掘りするのが時短ルートです。
日常作業コマンド(毎日使う)
# 新規ローカルリポジトリ初期化 git init # 既存リポジトリをclone git clone https://github.com/user/repo.git git clone git@github.com:user/repo.git # SSH形式 # submodule付きclone git clone --recurse-submodules <url> # 浅いclone(履歴なし、高速) git clone --depth=1 <url>
# 変更確認 git status git status -sb # 短縮形+ブランチ情報 # 差分確認 git diff # 作業ツリー vs index git diff --cached # index vs HEAD(ステージ済み) git diff HEAD # 作業ツリー vs HEAD(全変更) # ステージング git add path/to/file # 特定ファイル git add . # カレント配下すべて git add -A # repoトップから全変更 git add -p # hunk単位でインタラクティブ選択 # コミット git commit -m "メッセージ" git commit -am "msg" # tracked変更を自動add&commit git commit --amend # 直前commitを修正
詳細:addしたファイルの変更を確認・addの取り消し・コミットメッセージの変更。
ブランチ操作(Git 2.23+ switch系推奨)
# ブランチ一覧 git branch # ローカルのみ git branch -a # リモート追跡も含む git branch -vv # upstream情報付き # 作成・切替 git switch -c feat/login # 新規作成+切替 git switch -c feat/x origin/x # リモートから取り込み git switch --detach <SHA> # detachedモード # 削除 git branch -d feat/done # 安全削除(マージ済みのみ) git branch -D feat/failed # 強制削除 git push origin --delete feat # リモートブランチ削除 # リネーム git branch -m new-name # 現在ブランチを改名 git branch -m old new # 別ブランチを改名
詳細:ブランチ作成手順・ブランチ削除・ブランチ名変更・過去コミットから派生ブランチ。
履歴・diff・検索(見る系コマンド)
# 基本 git log # 詳細表示 git log --oneline # 1行ずつ git log --graph --all --oneline # 全ブランチグラフ # 情報量を増やす git log --stat # 変更ファイル+行数 git log -p # 実際の差分 git log --follow path/to/file # ファイル履歴(リネーム追跡) # 絞り込み git log --author="Taro" # 作者 git log --since="2 weeks ago" # 期間 git log --grep="fix" # メッセージ検索 git log -S"文字列" # コード変更で検索(pickaxe) git log -G"正規表現" # 正規表現で変更検索 # 比較 git log main..feature # featureにあってmainに無いコミット git log main...feature # 両方に固有のコミット(対称差) git log --merges # マージコミットのみ git log --no-merges # マージ以外 # 視覚化 git log --graph --decorate --oneline --all
# 基本diff git diff # 作業ツリー vs index git diff HEAD # 作業ツリー vs HEAD git diff --cached # index vs HEAD git diff main feature # ブランチ間 git diff main..feature # 同上 git diff main...feature # merge-base基準(PR相当) # ファイル指定 git diff -- src/app.js git diff main..feature -- src/ # 統計情報 git diff --stat # 行数集計 git diff --name-only # ファイル名のみ git diff --name-status # 変更種別付き (A/M/D) # 表示調整 git diff -w # 空白無視 git diff --word-diff # 単語単位 git diff -U10 # 前後10行
# 内容検索 git grep "TODO" # 作業ツリーから git grep "TODO" <SHA> # 特定コミット git grep --all-match -e "fix" -e "bug" # 複数条件AND # 作成者追跡 git blame path/to/file git blame -L 10,20 file # 行範囲指定 git blame -w file # 空白無視 # バグ混入コミット特定 git bisect start git bisect bad HEAD git bisect good v1.0.0
詳細:コミット間の差分比較・ブランチ間の差分比較・git diffファイル指定・bisectでバグ混入特定。
リモート同期(pull/push/fetch)
# fetch=受信のみ、merge無し git fetch # デフォルトリモート git fetch --all --prune # 全リモート+古い参照削除 # pull = fetch + merge git pull # 既定動作 git pull --rebase # mergeでなくrebase git pull --ff-only # FFのみ許可 # push git push # 追跡先へ git push -u origin feat # 初回push+upstream設定 git push --tags # タグをpush # 安全な強制push(個人ブランチ限定) git push --force-with-lease
# リモート確認 git remote -v git remote show origin # 詳細情報 # 追加・変更・削除 git remote add upstream <url> git remote set-url origin <new-url> git remote rename origin new-origin git remote remove old-origin # リモートブランチ確認 git ls-remote origin # リモートの実体を問い合わせ git branch -r # ローカルキャッシュ git remote set-head origin --auto # origin/HEAD更新
推奨pull戦略
pull.rebase=true:pullでrebase優先(直線履歴派)pull.ff=only:FFのみ許可(不要マージ抑止)rebase.autoStash=true:rebase時の未コミット自動退避fetch.prune=true:削除リモート参照の自動整理push.autoSetupRemote=true(Git 2.37+):初回push自動upstream
詳細:リモートブランチ確認・origin/upstream違い・履歴食い違い同期。
統合(merge/rebase/cherry-pick)
# 基本merge git merge feature/x git merge --no-ff feature/x # マージコミット強制 git merge --ff-only feature/x # FFでのみ許可 git merge --squash feature/x # Squash(1コミットに) # 中止・完了 git merge --abort # 中止 git merge --continue # conflict解消後に続行
# 通常rebase git rebase main git rebase origin/main # interactive rebase git rebase -i HEAD~5 # 直近5コミット編集 git rebase -i --autosquash # fixup!自動統合 git rebase --rebase-merges # マージコミット保持 # 中止・続行・スキップ git rebase --abort git rebase --continue git rebase --skip git rebase --edit-todo # todoを後から修正
# 特定コミットを取り込み git cherry-pick <SHA> git cherry-pick <SHA1> <SHA2> git cherry-pick A^..B # 範囲指定 # mergeコミットをcherry-pick git cherry-pick -m 1 <マージSHA> # 続行・中止 git cherry-pick --continue git cherry-pick --abort
詳細:rebase vs merge違い・マージ取消・rebase復旧・mergeコミット取消。
取り消し系(いちばん詰まる領域)
詳細:コミット取消全般・push取消・特定コミットまで戻す・消したファイル復元・revert vs reset。
stash(一時退避)
# 退避
git stash # 現在の変更を退避(untrackedは対象外)
git stash -u # untrackedも含む
git stash push -m "msg" # メッセージ付き
git stash push -p # hunk単位で選択退避
# 一覧・確認
git stash list # 一覧
git stash show stash@{0} # 中身サマリー
git stash show -p stash@{0} # diff表示
# 戻す
git stash pop # 最新を適用+削除
git stash apply stash@{1} # 適用のみ(残す)
git stash branch new-branch # 新ブランチで適用
# 削除
git stash drop stash@{0} # 1件削除
git stash clear # 全削除
詳細:stash失い時の復元。
タグ(リリース管理)
# 作成 git tag v1.0.0 # 軽量タグ git tag -a v1.0.0 -m "Release 1.0" # 注釈付きタグ(推奨) git tag v1.0.0 <SHA> # 過去コミットに付ける # 確認 git tag # 一覧 git tag -l "v1.*" # パターン絞り込み git show v1.0.0 # タグ情報 # 削除 git tag -d v1.0.0 # ローカル削除 git push origin --delete v1.0.0 # リモート削除 # push git push origin v1.0.0 # 単一 git push --tags # 全タグ git push --follow-tags # 推奨(追跡できるタグだけ)
詰まった時の詳細記事ナビ
カテゴリ別:困ったらこの記事
- commit取消:コミットの取り消し方
- push取消:pushを取り消す方法
- ファイル復元:消したファイルを戻す方法
- merge取消:mergeコミットを取り消して履歴を元に戻す
- rebase復旧:rebase途中でエラー
- conflict解消後:コンフリクト解消後pullできない
- ブランチ改名後push:ブランチ名変更後push不可
- non-fast-forward:non-fast-forwardで拒否
- 認証エラー:Permission denied (publickey)
- 機密誤コミット:履歴の機密情報削除
- stash失い:stashした内容を失った時の復元
- main削除:誤ってmaster/main削除
- submodule:submoduleの更新が反映されない
- detached HEAD:detached HEADから戻る
推奨Git設定(2026年版)
# ================================ # Git 推奨設定(2026年版) # ================================ # ユーザー情報 git config --global user.name "Your Name" git config --global user.email "you@example.com" # エディタ git config --global core.editor "code --wait" # VS Code # git config --global core.editor "vim" # デフォルトブランチ名 git config --global init.defaultBranch main # pull戦略 git config --global pull.rebase true # rebaseでpull git config --global pull.ff only # FFのみ許可 # rebase git config --global rebase.autoStash true # 未コミット自動退避 git config --global rebase.autoSquash true # fixup!自動統合 git config --global rebase.updateRefs true # ref自動追従 # rerere(同じconflictを記憶) git config --global rerere.enabled true # fetch git config --global fetch.prune true # 削除参照の自動整理 # push git config --global push.autoSetupRemote true # Git 2.37+ git config --global push.default simple # その他 git config --global color.ui auto git config --global core.autocrlf input # Unix系 # git config --global core.autocrlf true # Windows # 改行コードを強制統一したい場合 git config --global core.eol lf
# よく使う短縮コマンド git config --global alias.st "status" git config --global alias.co "checkout" git config --global alias.br "branch" git config --global alias.ci "commit" # 見栄えの良いlog 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" # 安全な強制push git config --global alias.fp "push --force-with-lease" # 最新10コミット git config --global alias.last "log -10 --oneline" # 変更を1コマンドで確認(status + diff) git config --global alias.s "!git status -sb && git diff --stat"
複数リポで異なるuser.email(会社/個人)
グローバル設定とは別に、特定ディレクトリ配下で別のメールアドレスを使いたい場合は~/.gitconfigに[includeIf "gitdir:~/work/"] path = ~/.gitconfig-workを記述し、~/.gitconfig-workに会社用のuser.emailを書きます。これで~/work/配下のrepoは自動で会社のメールが使われます。
プロが使う「知っていると差がつく」コマンド
# ブランチ/タグのどこに特定コミットが含まれるか
git branch --contains <SHA>
git tag --contains <SHA>
# コミットに含まれるかを短時間で判定
git merge-base --is-ancestor <SHA1> <SHA2> && echo "含まれる"
# 特定コミットでどのファイルが変わったか
git show --stat <SHA>
git show --name-only <SHA>
# ファイルが削除されたコミットを特定
git log --all --full-history --diff-filter=D -- path/to/file
# リポジトリサイズ分析
git count-objects -v
# 大きいblobを見つける
git rev-list --objects --all | \
git cat-file --batch-check="%(objectname) %(objecttype) %(objectsize) %(rest)" | \
awk '$2 == "blob" {print $3, $4}' | sort -n -r | head
# reflog:HEADの全移動履歴
git reflog
git reflog --date=iso # 時刻付き
git reflog show stash # stash専用reflog
# reflog参照でrestore
git reset --hard HEAD@{5} # 5つ前のHEADへ
git reset --hard "HEAD@{yesterday}" # 昨日時点
# 参照なしオブジェクトを救出
git fsck --no-reflogs --lost-found
# 最新コミットの短縮SHA git rev-parse --short HEAD # 現在ブランチ名 git branch --show-current # Git 2.22+ git symbolic-ref --short HEAD # 旧互換 # 最新タグ git describe --tags --abbrev=0 # 変更ファイル一覧(CI用) git diff --name-only origin/main..HEAD # ahead/behind件数 git rev-list --left-right --count origin/main...HEAD
# 別ディレクトリで別ブランチを同時作業 git worktree add ../repo-feature feature/x git worktree add ../repo-review review/pr-42 # 新ブランチを作りながら git worktree add -b hotfix/1 ../repo-hotfix main # 一覧 git worktree list # 削除 git worktree remove ../repo-feature git worktree prune # 整合性チェック
チーム運用のベストプラクティス
チーム運用チェックリスト
- Branch protection rulesでmain/developを保護(force push/削除/直push禁止)
- PR必須+必須レビュー+CI必須で統合品質を担保
- PR merge strategyをチームで統一(Squash推奨)
- Conventional Commitsでコミットメッセージを標準化
- pre-commit+gitleaksでlint/機密検知を自動化
- GitHub Secret Scanning+Push Protectionで漏洩を水際防止
- CODEOWNERSで責任範囲を明示
- 定期バックアップ(
git bundle)で災害対応
# フォーマット: <type>(<scope>): <subject> feat(auth): OAuth2対応を追加 fix(api): トークン有効期限の検証漏れを修正 docs: READMEのセットアップ手順を更新 style: lint自動整形 refactor(db): クエリビルダをリファクタ test(auth): ログインのユニットテスト追加 chore: dependabot設定を追加 # breaking changeは ! マーク feat!: APIレスポンス構造を変更(breaking)
実践シナリオ(Git操作の典型フロー)
シナリオ① 新規機能のPR作成まで
# 最新のmainを取得 git switch main git pull --rebase # 作業ブランチ作成 git switch -c feat/new-feature # 開発 → コミット git add . git commit -m "feat(auth): Add OAuth support" # push(初回は-u) git push -u origin feat/new-feature # GitHubでPR作成 → レビュー → mergeされたら git switch main git pull git branch -D feat/new-feature # 作業ブランチ削除
シナリオ② mainが進んで自分のPRが古くなった
git switch feat/xxx git fetch origin git rebase origin/main # conflict出たら解消→git add .→git rebase --continue git push --force-with-lease
シナリオ③ 直前のcommitを修正(未push)
git add . git commit --amend --no-edit
シナリオ④ stashで一時退避してブランチ切替
git stash push -u -m "wip: feat/xxx" git switch main # 緊急対応... git switch feat/xxx git stash pop
よくある質問
switch/restoreが推奨。checkoutは多機能すぎて誤用しやすいため、新規学習者にはswitchから教えるべき。既存スクリプトでのcheckout維持はOK。pull.rebase=true、「マージコミットが意図せず生まれるのを止めたい派」ならpull.ff=only。両方組み合わせる実務運用も多いです。git config --global alias.fp "push --force-with-lease"これでgit fpで済みます。pip install pre-commit)が現代的標準。gitleaks/prettier/ESLintなどを.pre-commit-config.yamlで宣言。Huskyはnode系プロジェクトで広く使われています。switchで十分。PRレビューしながら自分の作業も続けたい場合にworktreeが活躍します。git statusのヒントを読む、次にgit reflogで過去位置を確認、最終手段で--abort系。本記事の「緊急時早見表」と「詰まった時の詳細記事ナビ」を活用してください。push.autoSetupRemote=true(初回push自動upstream)、rebase.updateRefs=true(rebase時のref自動追従)、--force-if-includes(force pushの新しい安全装置)などが便利です。関連記事(カテゴリ別)
取り消し・復旧系
- 【Git】コミットの取り消し方|reset・revert・amend使い分け
- 【Git】pushを取り消す方法
- 【Git】消したファイルを戻す方法
- 【Git】mergeコミットを取り消して履歴を元に戻す
- 【Git】誤ってmaster/mainを削除したときの復旧方法
- 【Git】履歴に含まれる機密情報を完全に削除する方法
ブランチ・統合系
- 【Git】新しいブランチを作成する基本的な手順
- 【Git】ブランチを削除する方法
- 【Git】ブランチ名を変更する方法
- 【Git】rebaseとmergeの違いと使い分け
- 【Git】リベース途中でエラーになったときの復旧方法
エラー対処
- 【Git】Permission denied (publickey)エラーの原因と解決方法
- 【Git】non-fast-forwardで拒否されたときの解決方法
- 【Git】Pulling is not possible because you have unmerged filesの解決方法
- 【Git】refusing to merge unrelated historiesエラーの対処法
- 【Git】failed to push some refs toエラーの原因と対処法
差分・履歴確認
まとめ
- 実務でよく使うコマンドは約40個。全部覚える必要はない
- Git 2.23+のswitch/restoreを優先、checkoutは互換維持のみ
- 困ったときはgit status/git reflogが道標
- 推奨設定(pull.rebase/pull.ff=only/rebase.autoStash/rerere)で事故が激減
- 本記事の「緊急時早見表」と詳細記事ナビをブックマーク推奨
- Conventional Commits+Branch protection+pre-commitでチーム品質担保
- プロは
worktree/bisect/blame/reflogを使いこなす
Gitコマンドは覚えるより「必要になったら引ける状態」にしておくのが正解。この記事をブックマークして「緊急時早見表」を起点に詳細記事に飛ぶ使い方がおすすめです。日常コマンドは手が覚え、トラブル系は詳細記事で確実に対処、という二層構造で運用すれば、Gitでのストレスは大きく減らせます。現代的なswitch/restoreへ移行し、推奨設定を一括適用するだけで、毎日のGit体験が変わります。

