Gitコマンド大全

この記事は Git 2.55.0(2026年6月29日版) の公式ドキュメントを基準にしている。Git公式はコマンドを大きく高水準の porcelain と低水準の plumbing に分類している。

ただし、公式ドキュメントに掲載されていても、インストール方法・OS・ビルド設定・追加パッケージによって手元の環境に存在しないコマンドがある。

実際に使えるコマンドを確認する場合は、これが基準になる。

git --version
git help -a

git help -a は、その環境で利用可能なコマンドを一覧表示する。GitはPATH上の git-xxx 形式の外部プログラムもサブコマンドとして利用できるため、第三者製コマンドまで含めた「世界中に存在する全Gitコマンド」は有限ではない。

1. Gitのバージョンを確認する

git --version

インストールされているGitのバージョンを表示する。

git --version

git version

同じくGitのバージョン情報を表示する。

git version

git --version は内部的には git version として処理される。

2. ヘルプを見る

git help

Gitコマンドのマニュアルを表示する。

git help commit
git help rebase

利用可能な全コマンド。

git help -a

設定項目一覧。

git help --config

3. Gitを設定する

git config

ユーザー名、メールアドレス、エディタなどGitの設定を操作する。

現在のGitでは get、set、list などのサブコマンド形式が正式な基本形になっている。

git config set --global user.name "Taro"
git config set --global user.email "[email protected]"

確認。

git config get user.name
git config list
git config list --global

削除。

git config unset --global user.name

設定ファイルを編集。

git config edit --global

従来よく使われた、

git config --global user.name "Taro"
git config --list

という形式は現在も互換性のため存在するが、Git 2.55ではdeprecated modeとして扱われている。新しく記事やスクリプトを書くなら set、get、list を使う。

4. Gitリポジトリを作る

git init

現在のディレクトリをGitリポジトリとして初期化する。

git init

Bareリポジトリ。

git init --bare

5. リポジトリを取得する

git clone

既存リポジトリを複製する。

git clone https://example.com/repo.git

保存先を指定。

git clone URL my-project

特定ブランチ。

git clone --branch develop URL

履歴を浅く取得。

git clone --depth 1 URL

init と clone はGit公式でもプロジェクトを開始する基本コマンドとして扱われている。

6. 現在の状態を見る

git status

Working TreeとIndexの状態を確認する。

git status

短縮表示。

git status --short

7. 変更を見る

git diff

まだステージしていない変更。

git diff

ステージ済みの変更。

git diff --staged

コミット同士。

git diff HEAD~1 HEAD

ブランチ同士。

git diff main develop

特定ファイル。

git diff -- src/app.js

8. 変更をステージする

git add

変更をIndex、いわゆるステージングエリアへ追加する。

git add file.txt

現在のディレクトリ以下を対象にする。

git add .

Working Tree全体の追加・変更・削除をステージする。

git add -A

変更の一部分だけ選択。

git add -p

git add . の . は「Gitリポジトリ全体」という意味ではなく、現在のディレクトリをpathspecとして指定している点に注意する。

git stage

git add の同義語。

git stage file.txt

公式にも存在するが、通常は git add を使えばよい。

9. ファイルを削除する

git rm

Working TreeとIndexの両方から削除する。

git rm file.txt

ファイル自体は残し、Gitの追跡だけ解除する。

git rm --cached file.txt

10. ファイルを移動・改名する

git mv

ファイルやディレクトリを移動・改名する。

git mv old.txt new.txt

11. コミットする

git commit

ステージされた変更をコミットする。

git commit -m "Add login feature"

追跡済みファイルの変更・削除を自動的にステージしてコミットする。

git commit -am "Fix bug"

未追跡の新規ファイルは -a では追加されない。

直前のコミットを作り直す。

git commit --amend

既存のコミットメッセージをそのまま使う。

git commit --amend --no-edit

--no-edit は「コミット内容を変更しない」という意味ではない。ステージされた変更を直前のコミットに追加する場合に使う。

12. コミット履歴を見る

git log

履歴を表示する。

git log

1行表示。

git log --oneline

ブランチ構造を含める。

git log --oneline --graph --decorate --all

ファイルの履歴。

git log -- file.txt

Patchも表示。

git log -p

git show

コミット、タグ、Tree、BlobなどGitオブジェクトの内容を表示する。

git show HEAD
git show abc123

git shortlog

コミット履歴を作者などで要約する。

git shortlog
git shortlog -sn

13. ブランチを扱う

git branch

ブランチ一覧。

git branch

リモート追跡ブランチも表示。

git branch -a

作成。

git branch feature/login

削除。

git branch -d feature/login

強制削除。

git branch -D feature/login

名前変更。

git branch -m old-name new-name

14. ブランチを切り替える

git switch

ブランチ切り替え専用コマンド。

git switch develop

新しいブランチを作成して切り替える。

git switch -c feature/login

直前のブランチ。

git switch -

Detached HEAD。

git switch --detach HEAD~1

git checkout

歴史的にブランチ切り替えとファイル復元の両方を担当してきたコマンド。

git checkout develop
git checkout -b feature/login

現在も正式にサポートされておりdeprecatedではない。

新しい操作では、

ブランチ操作 → git switch
ファイル復元   → git restore

と分けると意図が明確になる。

15. リモートを管理する

git remote

登録済みリモート。

git remote
git remote -v

追加。

git remote add origin URL

URL変更。

git remote set-url origin URL

削除。

git remote remove origin

名前変更。

git remote rename origin upstream

詳細。

git remote show origin

16. リモートの情報を取得する

git fetch

リモートからオブジェクトやrefを取得する。

現在のローカルブランチへ自動的にマージはしない。

git fetch
git fetch origin
git fetch --all

削除済みのremote-tracking branchを整理。

git fetch --prune

17. リモートの変更を取り込む

git pull

リモートからfetchし、その後現在のブランチへ統合する。

git pull

Rebaseで統合。

git pull --rebase

概念的には、

git fetch
+
git merge または git rebase

をまとめて行うコマンド。

18. リモートへ送る

git push

ローカルのrefと必要なGitオブジェクトをリモートへ送る。

git push origin main

upstream設定。

git push -u origin feature/login

以降。

git push

リモートブランチ削除。

git push origin --delete feature/login

履歴を書き換えた後など。

git push --force-with-lease

--force-with-lease は単純な --force より保護機構があるが、「必ず安全なforce push」ではない。

より安全な方法として、Git 2.39以降では --force-if-includes が追加されている。

git push --force-with-lease --force-if-includes

--force-if-includes は、リモートの先端が自分のローカルの先端に含まれる場合のみforce pushする。

19. ブランチをマージする

git merge

別の開発履歴を現在のブランチへ統合する。

git switch main
git merge feature/login

Fast-forward可能でもMerge Commitを作る。

git merge --no-ff feature/login

中止。

git merge --abort

20. Rebaseする

git rebase

コミットを別の基点上へ再適用し、履歴を組み替える。

git rebase main

Interactive Rebase。

git rebase -i HEAD~5

競合解決後。

git rebase --continue

コミットをスキップ。

git rebase --skip

中止。

git rebase --abort

ちなみに実務ではこれをよく使う。作業中のブランチでコミットを整理したい場合など。

git rebase -i main

21. 特定コミットだけ取り込む

git cherry-pick

特定コミットの変更を現在のブランチへ適用する。

git cherry-pick abc123

複数。

git cherry-pick abc123 def456

中止。

git cherry-pick --abort

22. 作業を一時退避する

git stash

未コミット変更を一時退避する。

git stash

メッセージ付き。

git stash push -m "WIP login"

未追跡ファイルも含める。

git stash push -u

一覧。

git stash list

復元。

git stash apply

復元後、stashから削除。

git stash pop

削除。

git stash drop

全削除。

git stash clear

23. ファイルの変更を取り消す

git restore

Working TreeやIndexのファイルを復元する。

Working TreeをIndexの内容へ戻す。

git restore file.txt

ステージ解除。

git restore --staged file.txt

特定コミットから復元。

git restore --source=HEAD~1 file.txt

24. HEADやIndexを戻す

git reset

HEAD、Index、Working Treeの状態を変更する。

コミットだけ戻し、Indexは維持。

git reset --soft HEAD~1

HEADとIndexを戻し、Working Treeは維持。

git reset --mixed HEAD~1

--mixed はデフォルト。

Working Treeまで戻す。

git reset --hard HEAD~1

--hard は未コミット変更を失う可能性がある。

Git公式では reset は主にブランチ先端を移動して履歴を変更する操作として整理されている。

25. 過去のコミットを打ち消す

git revert

対象コミットと逆の変更を行う新しいコミットを作る。

git revert abc123

既存履歴自体は削除しない。

共有済みの履歴を打ち消す場合などに使う。

Git公式は次のように区別している。

restore → ファイルを復元
reset   → HEAD / Indexなどの状態を変更
revert  → 打ち消し用の新しいコミットを作る

26. 消えたコミットを探す

git reflog

HEADやbranch refが過去に指していた場所を確認する。

git reflog

誤ったresetやrebase後の復旧で非常に重要。

例。

git reset --hard HEAD@{2}

実際に戻す前に対象を十分確認する。

27. 未追跡ファイルを削除する

git clean

Gitで追跡されていないファイルを削除する。

まず削除対象を確認。

git clean -n

実行。

git clean -f

未追跡ディレクトリも。

git clean -fd

ignore対象まで削除。

git clean -fdx

-x はビルド成果物なども消す可能性があるため注意する。

28. タグを扱う

git tag

一覧。

git tag

軽量タグ。

git tag v1.0.0

Annotated Tag。

git tag -a v1.0.0 -m "Release 1.0.0"

削除。

git tag -d v1.0.0

リモートへ送る。

git push origin v1.0.0

全タグ。

git push origin --tags

29. リポジトリ内を検索する

git grep

Git管理対象などから文字列を検索する。

git grep "TODO"

行番号付き。

git grep -n "TODO"

30. 誰がその行を書いたか調べる

git blame

ファイルの各行を最後に変更したコミットや作者を表示する。

git blame app.js

行範囲。

git blame -L 10,30 app.js

git annotate

git blame とほぼ同目的。

git annotate app.js

公式には既存スクリプト等との後方互換性のために存在するコマンドと説明されている。通常は git blame を使えばよい。

31. バグを混入させたコミットを探す

git bisect

良いコミットと悪いコミットの間を二分探索する。

git bisect start
git bisect bad
git bisect good v1.0.0

Gitから指定されたコミットをテストし、

git bisect good

または

git bisect bad

を繰り返す。

終了。

git bisect reset

32. コミットに人間向けの名前を付けて表示する

git describe

最も近いタグなどを利用してコミットを表現する。

git describe
git describe --tags

33. ブランチ間のコミットを比較する

git cherry

upstreamに存在しないコミットなどを確認する。

git cherry main

git range-diff

2つのコミット系列を比較する。

git range-diff main..feature-v1 main..feature-v2

Rebase前後やPatch Setの比較に便利。

git show-branch

複数ブランチとコミットの関係を表示する。

git show-branch

34. Merge Toolを使う

git mergetool

設定された外部Merge Toolを起動する。

git mergetool

35. 競合解決を再利用する

git rerere

以前行った競合解決方法を記録し、同種の競合発生時に再利用する。

git rerere

rerere は “reuse recorded resolution” の略。

36. 複数のWorking Treeを使う

git worktree

同じGitリポジトリから複数の作業ディレクトリを作る。

git worktree add ../feature feature/login

一覧。

git worktree list

削除。

git worktree remove ../feature

37. リポジトリの一部だけ展開する

git sparse-checkout

巨大リポジトリで、Working Treeへ展開するファイルを絞る。

git sparse-checkout init --cone
git sparse-checkout set src docs

解除。

git sparse-checkout disable

38. Submoduleを扱う

git submodule

別のGitリポジトリを現在のリポジトリから参照する。

追加。

git submodule add URL libs/example

初期化・取得。

git submodule update --init

再帰的。

git submodule update --init --recursive

39. Commit Noteを付ける

git notes

コミットそのものを書き換えず、Gitオブジェクトへ補足情報を付ける。

git notes add -m "Reviewed" abc123
git notes show abc123

40. Commit・Tagの署名を検証する

git verify-commit

署名付きコミットを検証する。

git verify-commit abc123

git verify-tag

署名付きタグを検証する。

git verify-tag v1.0.0

41. Patchファイルを適用する

git apply

PatchをWorking TreeやIndexへ適用する。

git apply fix.patch

適用可能か確認。

git apply --check fix.patch

42. CommitからPatchを作る

git format-patch

コミットをメール送信用Patchへ変換する。

git format-patch HEAD~3

43. メール形式Patchをコミットとして取り込む

git am

Mailbox形式のPatchをコミットとして適用する。

git am patches.mbox

中止。

git am --abort

44. Pull Request相当の依頼文を作る

git request-pull

変更をpullしてもらうための要約を生成する。

git request-pull v1.0 URL feature

GitHub等のPull Request機能とは別物。

45. Patchをメール送信する

git send-email [環境依存]

Patch群をメールで送信する。

git send-email *.patch

公式GitのソースビルドではPerlが必要で、ディストリビューションによっては別パッケージになっている。このためGit本体があっても必ず利用できるとは限らない。

git imap-send [環境依存]

PatchメールをIMAPフォルダへ送る。

git imap-send

Patchメール文化を利用するプロジェクト向け。

46. リポジトリをArchive化する

git archive

特定Treeのファイルをtarやzipへ出力する。

git archive HEAD > source.tar

ZIP。

git archive --format=zip HEAD > source.zip

.git の履歴データ自体をバックアップするコマンドではない。

47. Gitリポジトリを1ファイルで運ぶ

git bundle

Gitオブジェクトとrefを単一ファイルへまとめる。

git bundle create repo.bundle --all

検証。

git bundle verify repo.bundle

Bundleからclone。

git clone repo.bundle repo

48. リポジトリを最適化する

git gc

不要データ整理やObject Databaseの最適化を行う。

git gc

より積極的な最適化。

git gc --aggressive

通常は単純な git gc で十分。

git maintenance

定期メンテナンスタスクを管理する。

git maintenance run

バックグラウンドメンテナンスを登録。

git maintenance start

git repack

オブジェクトをPackfileへ再編成する。

git repack

git prune

到達不能オブジェクトを削除する。

git prune

通常ユーザーが直接実行する必要はほぼなく、git gc に任せる。

git pack-refs

refを効率的な形式へまとめる。

git pack-refs --all

49. リポジトリの整合性を確認する

git fsck

Git Object Databaseの整合性や接続関係を検査する。

git fsck

git count-objects

Loose Object数やディスク使用量を見る。

git count-objects -v

git diagnose

診断情報をZIPへまとめる。

git diagnose

git bugreport

Git本体のBug Report作成用情報を収集する。

git bugreport

50. 複数リポジトリへ一括実行する

git for-each-repo

設定に登録されている複数リポジトリへ同じGitコマンドを実行する。

git for-each-repo --config=maintenance.repo maintenance run

主に大量のローカルリポジトリを管理する場合に使う。

51. 履歴やRepositoryをExport / Importする

git fast-export

Git履歴をストリーム形式へExportする。

git fast-export --all

git fast-import

対応するストリームを高速にImportする。

git fast-import

リポジトリ移行ツールなどのバックエンドとして使われる。

52. Gitオブジェクトを置き換える

git replace

Object自体を変更せず、Replacement Refによって別Objectとして見せる。

git replace OLD_OBJECT NEW_OBJECT

特殊な履歴修復・調査用途。

53. refを詳しく調べる

git show-ref

ローカルrefとObject IDを一覧表示する。

git show-ref

git for-each-ref

refを検索・ソート・任意形式で出力する。

git for-each-ref

git symbolic-ref

HEAD などSymbolic Refを扱う。

git symbolic-ref HEAD

git update-ref

refを低レベルで安全に更新する。

git update-ref refs/heads/test COMMIT

git check-ref-format

ref名が有効か確認する。

git check-ref-format refs/heads/feature

54. refsを低レベルで操作する

git refs

git refs 単独で使用するコマンドではない。

Git 2.55では次のサブコマンドが存在する。

git refs list
git refs verify
git refs exists refs/heads/main
git refs optimize

ref保存形式の移行。

git refs migrate --ref-format=reftable --dry-run

list は git for-each-ref、optimize は git pack-refs と同等の機能を提供する。

55. リモートのrefだけ確認する

git ls-remote

cloneや通常のfetchをせずにリモートrefを確認する。

git ls-remote origin

56. Ignoreの理由を調べる

git check-ignore

ファイルがどのignoreルールに一致したか確認する。

git check-ignore -v file.log

.gitignore のデバッグで便利。

57. gitattributesを確認する

git check-attr

対象ファイルへ適用されている属性を確認する。

git check-attr -a file.txt

58. mailmapを確認する

git check-mailmap

.mailmap によって正規化される作者名・メールアドレスを確認する。

git check-mailmap "Name <[email protected]>"

59. Commit MessageのTrailerを処理する

git interpret-trailers

Commit Message末尾の構造化されたTrailerを解析・追加する。

たとえば、

Signed-off-by:
Reviewed-by:
Co-authored-by:

などの処理に利用できる。

60. Git Hookを明示的に実行する

git hook

Git Hookを実行する。

git hook run pre-commit

Hookが存在する場合に実行される。

61. 認証情報を扱う

git credential

Credential HelperとGitの間で認証情報をやり取りするための低レベルインターフェース。

主にスクリプトやCredential Helper実装向け。

git credential-cache

認証情報を一時的にメモリへ保持するCredential Helper。

git credential-store

認証情報をディスクへ保存するCredential Helper。

credential-store は保存方式上、資格情報の管理方法を理解して使用する必要がある。

62. Git URLを解析する

git url-parse

Gitが扱うURLを解析する。

Git 2.55でドキュメント化された新しいコマンド。

ホスト名。

git url-parse --component host https://example.com/user/repo

Path。

git url-parse --component path https://example.com/user/repo

URLの構文チェックだけ行うこともできる。

git url-parse https://example.com/user/repo

63. Git Objectを直接調べる

ここからは主に plumbing command。

通常のGit利用ではほとんど直接使わないが、Git内部構造の理解やスクリプトでは重要になる。Git公式もPorcelainとは別の低レベルコマンド群として分類している。

git cat-file

Git Objectの型や内容を調べる。

git cat-file -t HEAD
git cat-file -p HEAD

git hash-object

ファイルのObject IDを計算する。

git hash-object file.txt

Object Databaseへ保存。

git hash-object -w file.txt

git ls-tree

Tree Objectを表示する。

git ls-tree HEAD

git ls-files

IndexやWorking Tree内のファイル情報を表示する。

git ls-files

git rev-parse

Revision表現などを解析する。

git rev-parse HEAD
git rev-parse --show-toplevel

git rev-list

Commit Objectを条件に従って列挙する。

git rev-list HEAD

git name-rev

Object IDに人間向けのref名を対応させる。

git name-rev HEAD

git merge-base

複数コミットの共通祖先を求める。

git merge-base main feature

64. Indexを直接操作する

git update-index

Index Entryを直接操作する。

git update-index --add file.txt

git read-tree

Tree ObjectをIndexへ読み込む。

git read-tree HEAD

git write-tree

現在のIndexからTree Objectを作る。

git write-tree

git checkout-index

Indexの内容をWorking Treeへ展開する。

git checkout-index file.txt

通常のファイル操作では add、restore、checkout などのPorcelainを使う。

65. Commit Objectを直接作る

git commit-tree

Tree ObjectからCommit Objectを生成する。

echo "message" | git commit-tree TREE_ID

通常の git commit より下のレイヤーを直接操作するコマンド。

66. Tree / Tag Objectを直接作る

git mktree

git ls-tree 形式の入力からTree Objectを作成する。

git mktag

入力されたTag Objectを検証して作成する。

どちらも通常ユーザー向けではない。

67. 低レベルDiff

git diff-files

Working TreeとIndexを比較する。

git diff-files

git diff-index

TreeとWorking TreeまたはIndexを比較する。

git diff-index HEAD

git diff-tree

Tree Object間を比較する。

git diff-tree HEAD~1 HEAD

git diff-pairs

Blob Pairの差分を計算する新しい低レベルコマンド。

-z が必須で、stdinにはNUL終端されたraw diffを与える。

git diff-tree -z -r -M HEAD~1 HEAD |
git diff-pairs -z

単独の

git diff-pairs

は正しい使用例ではない。

68. Mergeを低レベルで処理する

git merge-tree

IndexやWorking Treeを変更せずMerge結果を計算する。

git merge-file

3つのファイルをThree-way Mergeする。

git merge-file current base other

git merge-index

Mergeが必要なIndex EntryへMerge Programを実行する。

git merge-one-file

git merge-index が利用する標準Helper。

69. Packfileを扱う

git pack-objects

Git ObjectからPackfileを作る。

git index-pack

Packfile用Indexを作成する。

git unpack-objects

PackfileからObjectを展開する。

git unpack-file

Blobを一時ファイルへ展開する。

git verify-pack

Pack Indexを検証する。

git show-index

Pack Indexの内容を表示する。

git prune-packed

Packfile内にも存在する重複Loose Objectを削除する。

これらはGitのストレージ層を直接扱うコマンド。

70. Commit Graph / Multi-Pack Indexを扱う

git commit-graph

Commit Graphを作成・検証する。

git commit-graph write
git commit-graph verify

git multi-pack-index

複数Packfileを横断するIndexを管理する。

git multi-pack-index write

主に巨大リポジトリの性能最適化で使用される。

71. Git内部の変数を見る

git var

Gitが決定した論理変数を表示する。

git var GIT_EDITOR
git var GIT_AUTHOR_IDENT

72. git archiveの元Commitを取得する

git get-tar-commit-id

git archive で生成したtarに埋め込まれたCommit IDを取得する。

特殊な配布・ビルドシステム向け。

73. Patch IDを計算する

git patch-id

Patch内容に基づく識別IDを計算する。

Commit IDが異なっていても、同等のPatchか調べる用途などで使う。

74. メールPatchの内部処理

git mailinfo

メールからPatchと作者情報を抽出する。

git mailsplit

mboxを個別メールへ分割する。

git am などの下位レイヤーで使われる。

75. テキスト整形用Helper

git stripspace

不要な空白やコメントを除去する。

git column

入力を列形式に整形する。

git fmt-merge-msg

Merge Commit用のメッセージを生成する。

これらは主にGit内部やスクリプト向け。

76. Git内部Shell Script向けHelper

git sh-setup

Git付属Shell Script向けの共通関数。

git sh-i18n

Git Shell Script向け国際化処理。

通常ユーザーが直接使うものではない。

77. リモート通信の低レベルコマンド

git fetch-pack

別リポジトリからObjectを受信する。

git fetch の下位レイヤー。

git send-pack

Objectをリモートへ送る。

git push の下位レイヤー。

git upload-pack

fetchするクライアントへObjectを提供するサーバー側処理。

git receive-pack

pushされたObjectを受信する。

git upload-archive

リモートから要求されたArchiveを返す。

エンドユーザーが直接使用することは通常ない。

78. Gitサーバーを構築する

git daemon

Git Protocol用の簡易サーバー。

git daemon

git http-backend

Smart HTTPのサーバー側バックエンド。

git update-server-info

Dumb HTTPなど向けの補助情報を更新する。

git shell

Git専用SSHアクセス向けの制限Shell。

git http-fetch

HTTP取得用の低レベルHelper。

git http-push

HTTP/DAV Push用の低レベルHelper。

公式も後半のHelperについて「通常エンドユーザーが直接使用しない」と分類している。

79. Remote Helper

Gitはネイティブに対応していないTransportを外部Helperで追加できる。

git-remote-ext

ext:: URLを使って外部コマンドへ接続するHelper。

例。

git remote add origin "ext::some-command ..."

git-remote-fd

既存File Descriptor経由でGitサーバーへ通信する。

これらは通常 git remote-ext のようにユーザーが直接呼び出すものではなく、Gitから自動的に使用されるRemote Helper。

80. 他のバージョン管理システムと連携する

この一群は環境や追加依存関係によって存在しない場合がある。

git svn [環境依存]

SubversionとGitを双方向連携する。

git svn clone SVN_URL

PerlやSubversion関連ライブラリが必要。

git p4 [環境依存]

PerforceとGitを連携する。

git p4 clone P4_PATH

git archimport

GNU ArchリポジトリをImportする。

git cvsimport

CVSからGitへImportする。

git cvsexportcommit

Git CommitをCVS checkoutへExportする。

git cvsserver

GitリポジトリをCVS Serverとして扱えるようにする。

git quiltimport

Quilt Patch Setを現在のブランチへ適用する。

Git公式はこれらを「Interacting with Others」に分類している。

81. GUIを使う

ここは特に注意が必要。

git gui [環境依存]

Tcl/Tk製のGit GUI。

git gui

ただし Gitが入っているから必ず git gui が使えるわけではない。

git-gui は独立してメンテナンスされているプロジェクトで、利便性のためGit Suiteと一緒に配布されることがある。インストール方法やパッケージ構成によっては含まれない。

したがって、

git: 'gui' is not a git command

となる環境は正常に存在する。

git citool [環境依存]

Commit作成に特化したGit GUI。

git citool

実際には、

git gui citool

の標準Alias。したがって git gui が存在しない環境では通常これも使用できない。

82. gitk [独立コマンド・環境依存]

Git履歴を見るTcl/Tk製ブラウザ。

実行方法は、

gitk

であり、

git gitk

ではない。

公式Gitドキュメントには含まれているが、インストール構成によって存在しない場合がある。Gitのビルド自体も依存機能を省いて構成できる。

83. scalar [独立コマンド]

巨大Gitリポジトリ向け管理ツール。

Gitのサブコマンドではなく、

scalar clone URL
scalar register
scalar list

のように scalar コマンドとして実行する。

大規模リポジトリ向けにPartial Clone、Sparse Checkout、Maintenance等を組み合わせた設定を行う。

84. gitwebを使う

git instaweb [環境依存]

現在のリポジトリをgitwebで素早く閲覧するためのコマンド。

git instaweb

Web Serverなど外部環境も関係する。

gitweb [独立プログラム]

GitリポジトリをWebブラウザから閲覧するCGI Web Frontend。

git gitweb という通常のCLIサブコマンドとして使うものではない。

85. Partial Cloneの不足Objectを取得する

git backfill [EXPERIMENTAL]

Blobless Partial Cloneで欠けているBlobをまとめて取得する。

git backfill

Revision Rangeも指定できる。

git backfill main~100..main

Git公式が明示的に EXPERIMENTAL としており、将来挙動が変わる可能性がある。

86. 履歴を書き換える新コマンド

git history [EXPERIMENTAL]

特定Commitの履歴を書き換える実験的コマンド。

git history 単独では使わない。

主なサブコマンド。

git history fixup COMMIT
git history reword COMMIT
git history split COMMIT

Git公式が明示的にEXPERIMENTALとしている。

87. CommitをWorking TreeなしでReplayする

git replay [EXPERIMENTAL]

Commit系列を別の基点上へReplayする低レベルコマンド。

例。

git replay --onto=target origin/main..mybranch

Working TreeとIndexを変更せず、bare repositoryでも動作するよう設計されている。

通常ユーザーの履歴整理なら git rebase の方が一般的。

88. ファイルの最終変更Commitを調べる

git last-modified [EXPERIMENTAL]

各ファイルを最後に変更したCommitを表示する。

git last-modified -- README.md Makefile

再帰。

git last-modified --recursive

Git公式がEXPERIMENTALとしている。

89. Commitを大量にFormatする

git format-rev [EXPERIMENTAL]

stdinから受け取ったRevisionを指定フォーマットで変換する。

git format-rev 単独では正しい使い方ではない。

例。

git last-modified -- README.md Makefile |
git format-rev --stdin-mode=text --format=%an

--stdin-mode と --format が必要。

Git 2.55で追加された実験的コマンド。

90. Repository情報を取得する

git repo [EXPERIMENTAL]

Repository自体のメタデータや構造情報を取得する。

git repo 単独では使用しない。

情報取得。

git repo info references.format

Repository構造。

git repo structure

Git公式がEXPERIMENTALとしている。

91. 履歴を書き換える旧来の方法

git filter-branch [非推奨に近い扱い]

大量のCommit履歴を書き換える旧来のコマンド。

コマンド自体は現在も存在するが、公式ドキュメントは性能・安全性上の問題を強く警告しており、git filter-repo など別の履歴フィルタリングツールを推奨している。

git filter-repo はGit本体の標準コマンドではなく、別途インストールする外部ツール。

92. 古い履歴表示コマンド

git whatchanged [DEPRECATED]

各Commitが導入した差分付き履歴を表示する。

現在は公式にdeprecatedかつ将来削除予定。

ほぼ次で代替できる。

git log --raw --no-merges

新しく使う理由は基本的にない。

93. 冗長Packを検出する旧コマンド

git pack-redundant [DEPRECATED]

冗長なPackfileを検出する。

公式にdeprecatedかつ将来削除予定。

さらに現在は --i-still-use-this がないと実行に失敗する。

Repositoryの容量削減なら通常、

git gc

を使用する。

新規利用は避ける。

94. その他のInternal Helper

Git公式がInternal Helperとして分類しているコマンドには次のものがある。

git check-attr
git check-ignore
git check-mailmap
git check-ref-format
git column
git credential
git credential-cache
git credential-store
git fmt-merge-msg
git hook
git interpret-trailers
git mailinfo
git mailsplit
git merge-one-file
git patch-id
git sh-i18n
git sh-setup
git stripspace
git url-parse

この中には check-ignore のように一般ユーザーにも非常に便利なものがある一方、多くはGit内部やスクリプト向け。

95. Git公式2.55に掲載される主要コマンド一覧

Git 2.55.0公式マニュアルのMain Porcelainには次が含まれる。

git add
git am
git archive
git backfill
git bisect
git branch
git bundle
git checkout
git cherry-pick
git citool
git clean
git clone
git commit
git describe
git diff
git fetch
git format-patch
git gc
git grep
git gui
git history
git init
git log
git maintenance
git merge
git mv
git notes
git pull
git push
git range-diff
git rebase
git reset
git restore
git revert
git rm
git shortlog
git show
git sparse-checkout
git stash
git status
git submodule
git switch
git tag
git worktree

加えて、同じ一覧には独立プログラムの

gitk
scalar

も掲載されている。

96. Ancillary Command

Git公式が補助的なPorcelainとして掲載している主なコマンド。

git config
git fast-export
git fast-import
git filter-branch
git mergetool
git pack-refs
git prune
git reflog
git refs
git remote
git repack
git replace

git annotate
git blame
git bugreport
git count-objects
git diagnose
git difftool
git fsck
git help
git instaweb
git merge-tree
git rerere
git show-branch
git verify-commit
git verify-tag
git version
git whatchanged

97. 外部SCM・Patch通信系コマンド

Git公式掲載。インストール構成や依存ライブラリによって利用できないものがある。

git archimport
git cvsexportcommit
git cvsimport
git cvsserver
git imap-send
git p4
git quiltimport
git request-pull
git send-email
git svn

98. Plumbing Command

Git 2.55.0公式マニュアルに掲載されている主な低レベルコマンド。

git apply
git checkout-index
git commit-graph
git commit-tree
git hash-object
git index-pack
git merge-file
git merge-index
git mktag
git mktree
git multi-pack-index
git pack-objects
git prune-packed
git read-tree
git replay
git symbolic-ref
git unpack-objects
git update-index
git update-ref
git write-tree

git cat-file
git cherry
git diff-files
git diff-index
git diff-pairs
git diff-tree
git for-each-ref
git for-each-repo
git format-rev
git get-tar-commit-id
git last-modified
git ls-files
git ls-remote
git ls-tree
git merge-base
git name-rev
git pack-redundant
git repo
git rev-list
git rev-parse
git show-index
git show-ref
git unpack-file
git var
git verify-pack

99. Repository同期・サーバー用Plumbing

Git公式掲載。通常の開発者が直接呼び出すケースは少ない。

git daemon
git fetch-pack
git http-backend
git send-pack
git update-server-info

git http-fetch
git http-push
git receive-pack
git shell
git upload-archive
git upload-pack

100. 自分の環境で存在するコマンドを最終確認する

最も重要なのは、記事の一覧ではなく実際にインストールされているGit自身へ問い合わせること。

git --version
git help -a

Gitの内部プログラム配置先。

git --exec-path

git help -a に表示されなければ、その環境ではそのGitサブコマンドを利用できない可能性が高い。

たとえば、

git gui

が

git: 'gui' is not a git command

になる場合、そのインストールには git-gui が含まれていない。

git send-email、git svn、git gui、git citool なども依存機能やパッケージ構成によって存在しないことがある。公式Gitのビルド自体も、Perlなど一部依存機能を省いた構成が可能。

実務で覚える順番

まず覚える。

git config
git clone / git init
git status
git diff
git add
git commit
git log

次に覚える。

git branch
git switch
git remote
git fetch
git pull
git push
git merge
git rebase

トラブル対応で覚える。

git stash
git restore
git reset
git revert
git reflog
git clean
git cherry-pick

さらに必要になったら覚える。

git tag
git blame
git bisect
git worktree
git sparse-checkout
git submodule
git range-diff
git mergetool
git rerere

それ以降の

git cat-file
git rev-parse
git rev-list
git update-index
git read-tree
git write-tree
git commit-tree
git pack-objects
git update-ref
...

は、Git内部構造、Gitを利用するツール開発、大規模リポジトリ運用、サーバー構築などが必要になってから理解すればよい。

EXPERIMENTAL、DEPRECATED、環境依存コマンドについては、「公式ドキュメントに名前があるから普通に使うべき」とは考えず、Gitのバージョンと git help -a を確認してから利用する。