サイトアイコンmaita tomoya dev io

#63 Gitコマンド完全ガイド:164コマンドを網羅+業務で使える実践Tips

普段git addgit commitgit pushくらいしか使っていない...という人は多いのではないでしょうか。実はGitには164以上のコマンドが存在し、日々新しい機能が追加されています。この記事ではGitコマンドを網羅的に一覧化し、業務で使える実践的なコマンドや最新機能をまとめます。

目次

Gitコマンドの全体像

Gitのコマンドは大きく4つの層に分かれています。

説明対象ユーザー
Porcelain(メイン)日常的に使う高レベルコマンド全員
Ancillary(補助)設定・調査・操作の補助コマンド中級者〜
Interacting(外部連携)SVN、CVS等の他システム連携移行時のみ
Plumbing(低レベル)Gitの内部操作を行うコマンドツール開発者向け

普段使うのはPorcelainの約50コマンドです。しかし補助コマンドにも知っておくと作業が劇的に楽になるものが多数あります。まずは実践的なコマンドから見ていきましょう。全164コマンドの一覧表は記事の最後にまとめています。


業務で使えるコマンド厳選

ここからは知っていると業務が楽になるコマンドを実践シナリオ付きで紹介します。

git switch / git restore -- checkoutを卒業する

Git 2.23(2019年)で追加されたswitchrestoreは、checkoutの機能を分離したコマンドです。checkoutは「ブランチ切替」と「ファイル復元」の2つの役割を持っていて紛らわしかったため、明確に分けられました。

なお、checkout、switch、restoreの3つとも廃止される予定はありません公式ドキュメントで明言)。

# ブランチ操作は switch
git switch main                    # mainブランチに切替
git switch -c feature/new-page     # ブランチ作成+切替(-cはcreateの略)
git switch -                       # 直前のブランチに戻る

# ファイル復元は restore
git restore file.txt               # 作業ツリーの変更を元に戻す
git restore --staged file.txt      # ステージングを取り消す(ファイルは変更のまま)
git restore --source=HEAD~3 file.txt  # 3つ前のコミットの状態に復元

switchの主要オプション

オプション説明コマンド例
-ccreateの略。新規ブランチを作成して切替git switch -c feature/login
-C既にブランチが存在しても強制的に作り直して切替git switch -C feature/login
-d特定のコミットに一時的に移動(detached HEAD)git switch -d abc1234
-直前のブランチに戻るgit switch -

旧コマンドのgit checkout -bgit switch -cに対応します。-b(branch)から-c(create)に変わっただけで、やっていることは同じです。

git worktree -- 並行作業の救世主

「PRレビュー中に別の作業をしたい」緊急のhotfixが入ったけど、今の作業を中断したくない」というシーンで大活躍します。

worktreeがない場合の問題

通常、1つのリポジトリでは1つのブランチしか同時に開けません。別ブランチの作業をするには、今の変更をstashして、ブランチを切り替えて、終わったら戻して...という手間が発生します。

# worktreeなしの場合(面倒...)
git stash push -m "作業途中"     # 今の変更を退避
git switch hotfix/urgent-bug      # ブランチ切替
# ... hotfix作業 ...
git switch feature/login          # 元のブランチに戻る
git stash pop                     # 退避した変更を復元

worktreeを使うと

worktreeは同じリポジトリの別ブランチを、別のディレクトリに同時に展開できます。コミット履歴やリモート設定は共有しつつ、作業ディレクトリだけが独立します。

~/projects/
├── my-app/                  ← メインの作業ディレクトリ(feature/login ブランチ)
│   ├── src/
│   └── ...
└── my-app-hotfix/           ← worktreeで作った別ディレクトリ(hotfix/urgent-bug ブランチ)
    ├── src/
    └── ...

2つのディレクトリを別々のエディタやターミナルで同時に開けるので、作業を中断する必要がありません。

# 別ディレクトリにブランチを展開
git worktree add ../my-app-hotfix hotfix/urgent-bug

# 新規ブランチを作りながら展開することも可能
git worktree add -b hotfix/urgent-bug ../my-app-hotfix main

# 作業ツリーの一覧を確認
git worktree list
# /Users/me/projects/my-app          abc1234 [feature/login]
# /Users/me/projects/my-app-hotfix   def5678 [hotfix/urgent-bug]

# hotfixディレクトリで作業
cd ../my-app-hotfix
# ... 修正してコミット&プッシュ ...

# 作業完了後にクリーンアップ
git worktree remove ../my-app-hotfix

cloneとの違い

git worktreegit clone
リポジトリ1つを共有完全に別のコピー
ディスク容量少ない(.gitを共有)多い(.gitも複製)
コミット履歴リアルタイムで共有pushしないと反映されない
用途一時的な並行作業独立した長期作業

Claude Codeとの相性も抜群です。Claude Codeのサブエージェントがworktreeを使って並列作業を行う仕組みが注目されています。

git bisect -- バグ混入コミットを自動特定

「いつからこのバグが入った?」をコミット単位で特定できます。二分探索アルゴリズムを使うため、1000コミットあっても約10回の確認で特定できます。

# 二分探索を開始
git bisect start

# 現在のコミットはバグあり
git bisect bad

# このタグの時点ではバグなし
git bisect good v1.0

# Gitが中間のコミットをチェックアウトしてくれるので、テストして判定
git bisect good  # または git bisect bad

# テストスクリプトで自動化も可能
git bisect run npm test

# 完了後にリセット
git bisect reset

git stash -- 一時退避の応用技

基本のstash/pop以外にも便利なオプションがあります。

# メッセージ付きで退避(複数stashの管理に便利)
git stash push -m "ログイン画面の途中"

# 未追跡ファイルも含めて退避
git stash push -u

# 一部のファイルだけ退避
git stash push -p  # 対話モードでhunk単位で選択

# stashの一覧と内容確認
git stash list
git stash show -p stash@{0}  # 差分を表示

# 特定のstashを適用(削除しない)
git stash apply stash@{2}

# 特定のstashを削除
git stash drop stash@{1}

git maintenance -- リポジトリの自動最適化

リポジトリが大きくなると操作が遅くなります。maintenanceはバックグラウンドで最適化を行います。

# バックグラウンド最適化を開始(cron/launchdに登録される)
git maintenance start

# 手動で特定のタスクを実行
git maintenance run --task=gc          # ガベージコレクション
git maintenance run --task=commit-graph # コミットグラフの更新
git maintenance run --task=prefetch     # リモートの事前取得

# 最適化を停止
git maintenance stop

git rerere -- コンフリクト解決の再利用

「Re-use Recorded Resolution」の略。一度解決したコンフリクトのパターンを記録し、同じコンフリクトが再発した時に自動で解決してくれます。

# rerereを有効化(一度設定すればOK)
git config --global rerere.enabled true

# 以降、コンフリクト解決時に自動で記録される
# 同じコンフリクトが発生した時に自動適用される

リベースを繰り返すワークフローで特に効果を発揮します。

git sparse-checkout -- 必要なファイルだけ取得

モノレポや巨大リポジトリで、必要なディレクトリだけをチェックアウトします。

# sparse-checkoutを有効化
git sparse-checkout init --cone

# 必要なディレクトリだけを指定
git sparse-checkout set src/frontend docs/

# 現在の設定を確認
git sparse-checkout list

# 無効化して全ファイルに戻す
git sparse-checkout disable

git notes -- コミットに後からメモを追記

コミットメッセージとは別に、コミットを変更せずに後から補足情報を追記できます。

コミットメッセージとの違い

コミットメッセージgit notes
保存先コミットオブジェクト自体に含まれる別のrefに保存(refs/notes/commits
変更--amendが必要(コミットハッシュが変わる)いつでも追加・編集可能(ハッシュは変わらない
push通常のgit pushで送信されるgit push origin refs/notes/*が別途必要
用途変更の「何を・なぜ」を記録後から補足情報を付け足す

notesはデフォルトではpush/pullされないため、基本的に自分用のメモ帳として使います。チームで共有したい情報はコミットメッセージやPRのコメントに書くのが一般的です。

# コミットにメモを追加
git notes add -m "障害#123の原因コミットだった" abc1234

# メモを確認する方法
git notes show abc1234             # 特定コミットのメモを表示
git log --show-notes               # ログにメモを表示
git notes list                     # メモが付いたコミット一覧

# メモを編集・削除
git notes edit abc1234             # エディタで編集
git notes remove abc1234           # メモを削除

git tag -- リリースの目印をつける

コミットに固定の名前を付ける機能です。ブックマークのようなイメージで、ブランチと違って動きません

ブランチタグ
動くかコミットするたびに進む固定。動かない
用途開発中の作業線リリースや節目のマーキング
main, feature/loginv1.0, v2.3.1
# 注釈付きタグ(メッセージ・署名付き。こちらが推奨)
git tag -a v1.0 -m "初回リリース"

# 軽量タグ(ただの名前付け)
git tag v1.0

# 特定コミットにタグを付ける
git tag -a v1.0 abc1234 -m "初回リリース"

# タグをリモートにpush(タグは自動pushされない)
git push origin v1.0
git push origin --tags             # 全タグを一括push

# タグを削除
git tag -d v1.0                    # ローカル
git push origin --delete v1.0      # リモート

実務ではリリースバージョン管理(v1.0.0など)やCI/CDのトリガー(「タグが付いたらデプロイ」)として使われます。

git submodule -- リポジトリの中に別リポジトリを埋め込む

リポジトリの中に別のリポジトリを埋め込む機能です。「社内共通のUIコンポーネント集」を複数プロジェクトで使いたい場合などに使います。

my-project/(親リポジトリ)
├── src/
├── docs/
└── lib/ui-components/  ← 別リポジトリを埋め込み(サブモジュール)

親リポジトリが保存するのは**「どのリポジトリの、どのコミットを参照するか」だけです。サブモジュールのバージョンはコミットハッシュで固定**されるため、勝手に最新版になることはありません。

# サブモジュールを追加
git submodule add https://github.com/team/ui-components.git lib/ui-components

# クローン時にサブモジュールも取得
git clone --recurse-submodules https://github.com/user/my-project.git

# 既にクローン済みなら初期化+取得
git submodule update --init --recursive

# サブモジュールを最新に更新
git submodule update --remote

ただし実務ではサブモジュールは嫌われがちです。clone時に--recurse-submodulesを忘れてハマったり、親子の変更管理が複雑になるためです。最近は代わりにモノレポ(1つのリポジトリに全プロジェクトを入れる)やnpmパッケージ化を選ぶチームが多いです。

git range-diff -- PRの変更差分を比較

コードレビューで**「前回のレビュー指摘からどう変わったか」**を確認するのに最適です。

# v1とv2の差分を比較
git range-diff main..feature-v1 main..feature-v2

# force-push前後の差分を比較
git range-diff @{1}..@{1} @..@

常時使いしたいコマンドと設定

おすすめgit config設定

# プルの時にリベースをデフォルトにする
git config --global pull.rebase true

# マージ時にコンフリクト解決を記録
git config --global rerere.enabled true

# push時にローカルブランチ名と同名のリモートブランチに自動push
git config --global push.autoSetupRemote true

# ブランチ一覧をソート(最新コミット順)
git config --global branch.sort -committerdate

# diffを見やすくする
git config --global diff.algorithm histogram

# 差分の表示に色を付ける(移動した行を検出)
git config --global diff.colorMoved default

# デフォルトブランチ名をmainに
git config --global init.defaultBranch main

便利なエイリアス

# ログを見やすく
git config --global alias.lg "log --oneline --graph --all --decorate"

# ステータスの短縮表示
git config --global alias.st "status -sb"

# 直前のコミットを修正(メッセージそのまま)
git config --global alias.amend "commit --amend --no-edit"

# 未マージブランチ一覧
git config --global alias.unmerged "branch --no-merged"

# 最後のコミットの差分を表示
git config --global alias.last "diff HEAD~1"

# stashの一覧
git config --global alias.sl "stash list"

日常的に使えるオプション

# diff系
git diff --stat                   # 変更ファイル名と行数のサマリー
git diff --name-only              # 変更ファイル名だけ
git diff --word-diff              # 単語単位の差分表示

# log系
git log --oneline --graph --all   # ブランチの分岐を可視化
git log --since="1 week ago"      # 1週間以内のコミット
git log --author="name"           # 特定の著者のコミット
git log -p -- path/to/file        # 特定ファイルの変更履歴(差分付き)
git log -S "searchTerm"           # 特定の文字列を追加/削除したコミットを検索

# branch系
git branch -vv                    # 追跡ブランチとの差分を表示
git branch --merged main          # mainにマージ済みのブランチ
git branch -d $(git branch --merged main | grep -v main)  # マージ済みブランチを一括削除

Git 2.47〜2.52の新機能まとめ

2024年後半〜2025年にリリースされたGitの注目新機能です。

Git 2.47(2024年10月)

新機能説明
incremental multi-pack indexesパックインデックスの増分更新。大規模リポジトリのパフォーマンス改善
ハッシュ関数の最適化fetch/cloneの処理が10〜13%高速化

Git 2.48(2025年1月)

新機能説明
93人のコントリビュータ参加うち35人が新規。コミュニティの活発さが伺える
reftable対応の進展次世代ブランチ保存形式への移行準備

Git 2.49(2025年3月)

新機能説明
git backfillsparse-checkoutで、歴史的コンテンツを一括ダウンロード
新ハッシュ関数ディレクトリ構造を考慮し、パックサイズが大幅に削減
git clone --revision特定のコミットだけをクローン可能に
git gc --expire-to削除前にオブジェクトを別の場所に保存
git refs verifyブランチやタグの整合性を自動チェック

Git 2.50(2025年6月)

新機能説明
git fast-export --signed-commitsコミット署名のエクスポートに対応
cruft packsの改善不要オブジェクトのパック処理が改善

Git 2.51(2025年8月)

新機能説明
SHA-1/SHA-256署名の同時インポート将来のハッシュ移行に向けた準備

Git 2.52(2025年11月)

新機能説明
SHA-1→SHA-256移行の基盤Git 3.0に向けたハッシュアルゴリズム置き換えの準備
git last-modifiedディレクトリの最終更新コミットを一括取得
Mesonビルド対応新しいビルドシステムへの対応
Rust再実装の開始一部コンポーネントのRust化が進行中

Git 3.0(2026年末予定)

  • SHA-1からSHA-256への移行が予定されている
  • 公式ドキュメントで変更予定の整理が始まっている
  • 後方互換性に影響する変更が含まれる可能性あり

Gitコマンド完全一覧(164コマンド)

ここからはGitの全コマンドをカテゴリ別に一覧化します。辞書的にお使いください。

メインコマンド(Porcelain Commands)

日常の開発で使う主要コマンドです。

リポジトリの作成・取得

コマンド説明コマンド例
git init新しいリポジトリを作成git init my-project
git cloneリポジトリを複製git clone https://github.com/user/repo.git

スナップショットの作成

コマンド説明コマンド例
git add変更をステージングエリアに追加git add . / git add -p(対話的に追加)
git status作業ツリーの状態を表示git status -s(短縮表示)
git diff変更の差分を表示git diff --staged(ステージング済みの差分)
git commit変更を記録git commit -m "メッセージ"
git notesコミットにメモを追加git notes add -m "補足情報" HEAD
git restore作業ツリーのファイルを復元git restore file.txt / git restore --staged file.txt
git resetHEADを指定した状態にリセットgit reset --soft HEAD~1
git rmファイルを削除しインデックスから除去git rm --cached secret.txt(Git管理のみ解除)
git mvファイルを移動またはリネームgit mv old.txt new.txt
git clean未追跡ファイルを削除git clean -fd(ディレクトリごと削除)

ブランチとマージ

コマンド説明コマンド例
git branchブランチの一覧・作成・削除git branch -a(全ブランチ表示)
git checkoutブランチ切替・ファイル復元git checkout -b new-branch(作成+切替)
git switchブランチ切替専用(Git 2.23+)git switch -c new-branch(作成+切替)
git mergeブランチを統合git merge feature --no-ff
git rebaseコミットを別のベースに再適用git rebase -i HEAD~3(対話的リベース)
git cherry-pick特定のコミットを適用git cherry-pick abc1234
git revertコミットを打ち消す新コミットを作成git revert HEAD
git stash作業中の変更を一時退避git stash push -m "作業中" / git stash pop
git tagタグの作成・一覧・削除git tag -a v1.0 -m "リリース"
git worktree複数の作業ツリーを管理git worktree add ../hotfix hotfix-branch

履歴の確認

コマンド説明コマンド例
git logコミット履歴を表示git log --oneline --graph --all
git shortlogコミット履歴を著者別に集約git shortlog -sn(コミット数順)
git showコミットやオブジェクトの詳細表示git show HEAD:src/app.ts(特定ファイルの内容)
git describe直近のタグからの距離を表示git describe --tags
git range-diff2つのコミット範囲を比較git range-diff main..feature-v1 main..feature-v2

リモート操作

コマンド説明コマンド例
git fetchリモートの変更を取得(マージしない)git fetch --prune(削除済みブランチも反映)
git pullfetch + merge を一括実行git pull --rebase(マージコミットを作らない)
git pushローカルの変更をリモートに送信git push -u origin feature
git remoteリモートリポジトリの管理git remote -v(URLを表示)
git submoduleサブモジュールの管理git submodule update --init --recursive

パッチ操作

コマンド説明コマンド例
git format-patchパッチファイルを作成git format-patch HEAD~3(直近3コミット)
git amメールボックス形式のパッチを適用git am < patch-file.patch
git applyパッチをファイルに適用git apply --check patch.diff(適用前テスト)

調査・デバッグ

コマンド説明コマンド例
git bisect二分探索でバグ混入コミットを特定git bisect startgit bisect badgit bisect good v1.0
git grepリポジトリ内のパターン検索git grep -n "TODO"(行番号付き)
git blame各行の最終変更者を表示git blame -L 10,20 file.txt(10〜20行目)

その他のメインコマンド

コマンド説明コマンド例
git archiveファイルのアーカイブを作成git archive --format=zip HEAD -o release.zip
git bundleオブジェクトとrefをアーカイブで移動git bundle create repo.bundle --all
git gc不要オブジェクトの削除と最適化git gc --aggressive
git maintenanceリポジトリの自動最適化タスク実行git maintenance start(バックグラウンド最適化開始)
git scalar大規模リポジトリの管理ツールgit scalar clone https://github.com/large/repo.git
git sparse-checkout作業ツリーを特定ファイルに限定git sparse-checkout set src/ docs/
git citoolグラフィカルなコミットツールgit citool
git guiGit操作のGUIツールgit gui
git gitkリポジトリブラウザ(GUI)gitk --all
git whatchangedコミットごとの差分付きログgit whatchanged --since="2 weeks ago"

補助コマンド(Ancillary Commands)

操作系(Manipulators)

コマンド説明コマンド例
git configGitの設定を管理git config --global user.name "名前"
git reflogHEADの移動履歴を表示git reflog(誤操作の復元に必須)
git remoteリモートリポジトリの管理git remote add upstream URL
git filter-branchブランチ履歴の書き換えgit filter-branch --tree-filter 'rm -f secret.txt' HEAD
git fast-exportリポジトリデータのエクスポートgit fast-export --all > export.dat
git fast-importデータの高速インポートgit fast-import < export.dat
git mergetoolマージコンフリクト解消ツールを起動git mergetool(設定済みツールが起動)
git pack-refsrefを効率的にパックgit pack-refs --all
git prune到達不能オブジェクトを削除git prune --dry-run(削除対象の確認)
git repackパックファイルを再構成git repack -a -d
git replaceオブジェクトの参照を置き換えgit replace old-commit new-commit

調査系(Interrogators)

コマンド説明コマンド例
git annotateファイルの各行にコミット情報を注釈git annotate file.txt(blameとほぼ同機能)
git blame各行の最終変更コミットと著者を表示git blame -w file.txt(空白変更を無視)
git bugreportバグレポート用の情報を収集git bugreport
git count-objectsオブジェクト数とディスク使用量を表示git count-objects -v
git diagnose診断情報のzipアーカイブを生成git diagnose
git difftool外部diffツールで差分を表示git difftool HEAD~1(VSCodeなどで表示)
git fsckオブジェクトの整合性を検証git fsck --full
git gitwebWeb上でリポジトリを閲覧git instaweb(簡易Webサーバー起動)
git helpヘルプ情報を表示git help -a(全コマンド一覧)
git instawebgitwebをブラウザで即座に起動git instaweb --httpd=python
git merge-treeインデックスを変更せずにマージを実行git merge-tree HEAD feature-branch
git rerereコンフリクト解決の記録と再利用git config rerere.enabled true(有効化)
git show-branchブランチとコミットの関係を表示git show-branch --all
git verify-commitコミットのGPG署名を検証git verify-commit HEAD
git verify-tagタグのGPG署名を検証git verify-tag v1.0
git versionGitのバージョンを表示git version

外部連携コマンド

他のバージョン管理システムとの連携に使用します。移行プロジェクト以外では使う機会はあまりありません。

コマンド説明用途
git svnSubversionリポジトリとの双方向連携SVN→Git移行
git p4Perforceリポジトリとの連携Perforce→Git移行
git cvsimportCVSリポジトリからのインポートCVS→Git移行
git cvsexportcommit単一コミットをCVSにエクスポートGit→CVS連携
git cvsserverGit用CVSサーバーエミュレータCVSクライアント互換
git archimportGNU ArchリポジトリからのインポートArch→Git移行
git imap-sendパッチをIMAPフォルダに送信メールベースのレビュー
git send-emailパッチをメールで送信Linuxカーネル開発等
git request-pull保留中の変更のサマリーを生成プルリクエストの原型
git quiltimportquiltパッチセットを適用パッチ管理ツール連携

低レベルコマンド(Plumbing Commands)

Gitの内部構造を直接操作するコマンドです。通常の開発では使いませんが、ツール開発やトラブルシューティングで役立ちます。

オブジェクト操作

コマンド説明コマンド例
git cat-fileオブジェクトの内容や種類を表示git cat-file -p HEAD(コミット内容を表示)
git hash-objectデータのオブジェクトIDを計算git hash-object file.txt
git mktagタグオブジェクトを作成git mktag < tag-data
git mktreeツリーオブジェクトを作成git mktree < tree-listing
git commit-treeコミットオブジェクトを作成git commit-tree tree-hash -m "msg"
git commit-graphコミットグラフファイルの書き込み/検証git commit-graph write --reachable
git multi-pack-indexマルチパックインデックスの管理git multi-pack-index write

インデックス操作

コマンド説明コマンド例
git read-treeツリー情報をインデックスに読み込みgit read-tree --prefix=sub/ HEAD:lib/
git write-treeインデックスからツリーオブジェクトを作成git write-tree
git update-indexインデックスにファイル内容を登録git update-index --assume-unchanged file.txt
git checkout-indexインデックスから作業ツリーにコピーgit checkout-index -a
git ls-filesインデックスと作業ツリーのファイル情報git ls-files --others --exclude-standard(未追跡ファイル)
git ls-treeツリーオブジェクトの内容を一覧表示git ls-tree -r HEAD(全ファイル)

差分と比較

コマンド説明コマンド例
git diff-files作業ツリーとインデックスの差分git diff-files
git diff-indexツリーと作業ツリー/インデックスの差分git diff-index HEAD
git diff-tree2つのツリーオブジェクトの差分git diff-tree HEAD~1 HEAD
git merge-baseマージの共通祖先を検索git merge-base main feature
git merge-file3-wayファイルマージを実行git merge-file mine.txt base.txt theirs.txt
git merge-indexマージが必要なファイルにマージを実行git merge-index git-merge-one-file -a
git patch-idパッチの一意なIDを計算`git diff HEAD~1

参照(Ref)操作

コマンド説明コマンド例
git for-each-ref各refの情報を出力git for-each-ref --sort=-creatordate refs/tags/
git for-each-repoリポジトリ一覧にコマンドを実行git for-each-repo --config=maintenance.repo git gc
git symbolic-refシンボリックrefの読み書きgit symbolic-ref HEAD(現在のブランチ)
git update-refrefのオブジェクト名を安全に更新git update-ref refs/heads/main HEAD
git show-refローカルのrefを一覧表示git show-ref --tags(タグ一覧)
git ls-remoteリモートのrefを一覧表示git ls-remote origin
git name-revrevの記号名を検索git name-rev HEAD
git rev-listコミットオブジェクトを逆順で一覧表示git rev-list --count HEAD(総コミット数)
git rev-parseパラメータを解析git rev-parse --short HEAD(短縮ハッシュ)
git cherry未適用のコミットを検索git cherry -v main feature

パック操作

コマンド説明コマンド例
git pack-objectsオブジェクトのパックアーカイブを作成git pack-objects --all pack
git unpack-objectsパックからオブジェクトを展開git unpack-objects < pack-file
git index-packパックのインデックスファイルを作成git index-pack pack-file.pack
git prune-packedパック済みの余分なオブジェクトを削除git prune-packed
git verify-packパックアーカイブの検証git verify-pack -v pack-file.idx
git show-indexパックアーカイブのインデックスを表示git show-index < pack-file.idx
git unpack-fileblobの内容で一時ファイルを作成git unpack-file blob-hash
git get-tar-commit-idアーカイブからコミットIDを抽出git get-tar-commit-id < archive.tar

リポジトリ同期(サーバー)

コマンド説明コマンド例
git daemonGitリポジトリのシンプルサーバーgit daemon --base-path=/srv/git
git fetch-pack他リポジトリから不足オブジェクトを受信git fetch-pack remote-url
git send-packGitプロトコルでオブジェクトを送信git send-pack remote-url
git http-backendHTTP越しのGitサーバー実装Apache/Nginx経由で使用
git update-server-infoダムサーバー用の補助情報を更新git update-server-info

内部ヘルパー

コマンド説明コマンド例
git check-attrgitattributes情報を表示git check-attr diff -- file.txt
git check-ignoregitignore/excludeファイルのデバッグgit check-ignore -v file.txt(どのルールで無視されたか)
git check-mailmapmailmapの正規名とメールを表示git check-mailmap "Author Name"
git check-ref-formatref名が正しい形式か検証git check-ref-format refs/heads/main
git columnデータを列形式で表示`echo -e "a\nb\nc"
git credentialユーザー認証情報の取得と保存git credential fill
git credential-cacheパスワードを一時的にメモリに保存git config credential.helper cache
git credential-store認証情報をディスクに保存git config credential.helper store
git fmt-merge-msgマージコミットメッセージを生成git fmt-merge-msg < .git/FETCH_HEAD
git hookGitフックを実行git hook run pre-commit
git interpret-trailersコミットメッセージにトレーラーを追加/解析git interpret-trailers --trailer "Signed-off-by: Name"
git mailinfoメールからパッチと著者情報を抽出git mailinfo msg patch < email.txt
git mailsplitmboxファイルを分割git mailsplit -o patches/ mbox
git merge-one-filemerge-indexと連携する標準ヘルパーgit merge-index git-merge-one-file -a
git sh-i18nシェルスクリプト用i18nセットアップGitスクリプト内部で使用
git sh-setupシェルスクリプト用共通セットアップGitスクリプト内部で使用
git stripspace不要な空白を除去`echo " hello "
git varGitの論理変数を表示git var GIT_EDITOR(使用エディタ)

まとめ

  • Gitには164以上のコマンドが存在するが、日常的に使うのは約30〜50コマンド
  • git switch/git restorecheckoutの明確な代替。廃止予定はないので安心して移行できる
  • git worktreegit bisectgit rerereは知っているだけで業務効率が大きく変わる
  • git maintenanceでリポジトリの自動最適化が可能
  • Git 2.49で追加されたgit backfillgit clone --revisionはモノレポ運用で効果大
  • **Git 3.0(2026年末予定)**でSHA-256移行が予定されているため、今後の動向に注目

基本コマンドだけでなく、一歩踏み込んだコマンドを知っていると、日々の開発がずっと快適になります。まずはgit switchgit restoreから使い始めてみてください。

参考リンク