この記事は 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 を確認してから利用する。