【Git】よく使うgitコマンド決定版チートシート|緊急早見表+switch/restore対応+推奨設定2026

【Git】よく使うgitコマンドまとめ|初心者から中級者向けの実用例 Git

Gitコマンドは200以上あり、全て覚えるのは非現実的。実務で本当に使うのは40コマンド程度です。この記事では、開発シーン別に「これさえ知っていれば9割の状況で困らない」コマンドをコピペで使える形でまとめました。

単なるコマンド集ではなく、困った時にどの記事を見るかがわかる「Git作業の地図」として設計しています。初心者〜中級者が日常的にブックマークして使える実用性を最優先しました。古いgit checkout系ではなくGit 2.23+推奨のgit switchgit restoreを中心に記載しています。

この記事で学べること

  • 緊急時の「やばい」→「このコマンド」の早見表
  • 日常作業・ブランチ運用・リモート同期の定番コマンド
  • 履歴確認とdiff(git loggit diff)の実用オプション
  • 取り消し系(reset/revert/restore)の使い分け
  • Git 2.23+推奨のswitchrestorecheckoutの置換)
  • 現代的な推奨設定一括スクリプト(2026年版)
  • プロが使う便利エイリアス・調査コマンド
  • 困った時の詳細記事への導線
スポンサーリンク

【緊急時】「やばい」→「このコマンド」早見表

実務でもっとも焦るシチュエーションと、その対処コマンドを一覧にしました。詳しくは各リンク先へ。この表だけでもブックマークしておくと事故対応が速くなります。

状況 コマンド 詳細
直前のコミットを取り消したい git reset --soft HEAD~1 取消方法
pushしたコミットを取り消したい git revert <SHA> push取消
消したファイルを戻したい git restore path ファイル復元
mainブランチを削除してしまった git branch main <SHA> main削除復旧
mergeを取り消したい(push済み) git revert -m 1 <SHA> merge取消
rebase中に詰まった git rebase --abort rebase復旧
pullでファイルが消えた git reset --hard ORIG_HEAD pull削除復元
stashした変更が見当たらない git reflog show stash stash失い
機密情報をコミットしてしまった rotate最優先→filter-repo 機密削除
Permission denied (publickey) ssh -vT git@github.com SSH認証

ポイント:Gitのトラブルは原因パターンが限られているため、症状→コマンド→詳細記事の3ステップで多くが解決できます。この早見表をブックマークしておき、困ったら該当行の詳細記事で深掘りするのが時短ルートです。

日常作業コマンド(毎日使う)

リポジトリ初期化・clone
# 新規ローカルリポジトリ初期化
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 switch main git checkout main
新規ブランチ+切替 git switch -c feat/x git checkout -b feat/x
ファイル復元 git restore file git checkout -- file
ステージ解除 git restore --staged file git reset HEAD file
直前ブランチへ戻る git switch - git checkout -
ブランチ管理コマンド
# ブランチ一覧
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・検索(見る系コマンド)

log系の実用オプション
# 基本
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系
# 基本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行
検索・blame
# 内容検索
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)

基本のpush/pull/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系
# 基本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系
# 通常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を後から修正
cherry-pick
# 特定コミットを取り込み
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コミット取消

取り消し系(いちばん詰まる領域)

やりたいこと コマンド
作業ツリーの変更を破棄 git restore path
ステージングを解除 git restore --staged path
直前commitを修正 git commit --amend
直前commitを取消(変更は残す) git reset --soft HEAD~1
直前commitを完全破棄 git reset --hard HEAD~1
push済みcommitを打ち消す git revert <SHA>
マージコミットを打ち消す git revert -m 1 <SHA>
特定ファイルをpull前に戻す git restore --source=ORIG_HEAD -- path

詳細:コミット取消全般push取消特定コミットまで戻す消したファイル復元revert vs reset

stash(一時退避)

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              # 推奨(追跡できるタグだけ)

詰まった時の詳細記事ナビ

推奨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)&lt;%an&gt;%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:忘れ物救出の最終手段
# 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
CI/自動化で役立つ
# 最新コミットの短縮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
worktree(並行作業の武器)
# 別ディレクトリで別ブランチを同時作業
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-commitgitleaksでlint/機密検知を自動化
  • GitHub Secret Scanning+Push Protectionで漏洩を水際防止
  • CODEOWNERSで責任範囲を明示
  • 定期バックアップ(git bundle)で災害対応
コミットメッセージ規約(Conventional Commits)
# フォーマット: <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が古くなった

追従rebase
git switch feat/xxx
git fetch origin
git rebase origin/main
# conflict出たら解消→git add .→git rebase --continue
git push --force-with-lease

シナリオ③ 直前のcommitを修正(未push)

amend で上書き
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

よくある質問

Qgit switch と git checkout どっち使う?
AGit 2.23+ならswitchrestoreが推奨。checkoutは多機能すぎて誤用しやすいため、新規学習者にはswitchから教えるべき。既存スクリプトでのcheckout維持はOK。
Qpull.rebaseとpull.ff=onlyどっち?
Aチームの運用方針次第。「直線履歴派」ならpull.rebase=true、「マージコミットが意図せず生まれるのを止めたい派」ならpull.ff=only。両方組み合わせる実務運用も多いです。
Q毎回–force-with-leaseを打つのが面倒
Aエイリアス登録が王道。git config --global alias.fp "push --force-with-lease"これでgit fpで済みます。
Qコミット前に自動チェック(lint等)を入れたい
Apre-commitフレームワーク(pip install pre-commit)が現代的標準。gitleaks/prettier/ESLintなどを.pre-commit-config.yamlで宣言。Huskyはnode系プロジェクトで広く使われています。
Qworktreeとbranchの切替、どちらを使う?
A同時に2つ以上のブランチを並行編集したい/ビルド結果を両方保持したい場合はworktree。単純な切替ならswitchで十分。PRレビューしながら自分の作業も続けたい場合にworktreeが活躍します。
Qどうしても詰まった時は?
Aまずgit statusのヒントを読む、次にgit reflogで過去位置を確認、最終手段で--abort系。本記事の「緊急時早見表」と「詰まった時の詳細記事ナビ」を活用してください。
QGit 2.37+の新機能は?
Apush.autoSetupRemote=true(初回push自動upstream)、rebase.updateRefs=true(rebase時のref自動追従)、--force-if-includes(force pushの新しい安全装置)などが便利です。

関連記事(カテゴリ別)

取り消し・復旧系

ブランチ・統合系

エラー対処

差分・履歴確認

まとめ

  • 実務でよく使うコマンドは約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でチーム品質担保
  • プロはworktreebisectblamereflogを使いこなす

Gitコマンドは覚えるより「必要になったら引ける状態」にしておくのが正解。この記事をブックマークして「緊急時早見表」を起点に詳細記事に飛ぶ使い方がおすすめです。日常コマンドは手が覚え、トラブル系は詳細記事で確実に対処、という二層構造で運用すれば、Gitでのストレスは大きく減らせます。現代的なswitch/restoreへ移行し、推奨設定を一括適用するだけで、毎日のGit体験が変わります。