コミットが早すぎた、間違えた、別ブランチに入れた
「取り消し」で検索するか「取り消しと巻き戻し」グループを直接見て、まず「まだプッシュしていない」(reset / --amend)と「すでにプッシュした」(revert)の2つの状況を区別してからコマンドを選びます。「よく使う組み合わせ」には「main にコミットしてしまった内容を新しいブランチへ移す」といった完全なレシピがあります。
Guide
Git コマンド早見表は、そのまま使える一覧です。149件のコマンドを「初期設定と構成、日常のコミット、ブランチ、マージとリベース、取り消しと巻き戻し、リモート連携、stash、タグ、サブモジュールとワークツリー、履歴の調査とトラブルシューティング、無視設定と属性」の11の場面に分類し、それぞれに1文の解説、そのまま貼り付けられる例、そして「注意/危険」の2段階のリスク表示を付けています。未コミットの変更を失うコマンドや、共有済みの履歴を書き換えるコマンドはひと目でわかります。
更新日 2026-09-094 sources8 min read
Git コマンド早見表は、そのまま使える一覧です。149件のコマンドを「初期設定と構成、日常のコミット、ブランチ、マージとリベース、取り消しと巻き戻し、リモート連携、stash、タグ、サブモジュールとワークツリー、履歴の調査とトラブルシューティング、無視設定と属性」の11の場面に分類し、それぞれに1文の解説、そのまま貼り付けられる例、そして「注意/危険」の2段階のリスク表示を付けています。未コミットの変更を失うコマンドや、共有済みの履歴を書き換えるコマンドはひと目でわかります。
対象となるのは3つの場面です。やりたいことは覚えているのにコマンドの綴りを忘れたとき(「commit 取り消し」「リモートブランチ削除」で検索)。コマンドは知っているけれど何か失うのか不安なとき(危険度と注記を確認)。そして Git に初めて触れ、add、commit、push の間で何が移動しているのかを知りたいとき(ページ冒頭の4領域の図と下部の操作図を参照)。
ページ下部には、メモリ上だけで動く Git シミュレーター端末もあります。30以上の主要サブコマンドに対応し、右側のコミットグラフがコマンドごとにリアルタイムで変化します。「最初のコミット」から「マージコンフリクトの解消」までの10の練習ステージ付きです。本物の Git ではなく、あなたの PC やネットワークにアクセスすることもありませんが、意味論は公式マニュアルに沿って実装しているので、練習した内容はそのまま実機に移せます。
検索欄に「commit 取り消し」と入力すると、「取り消しと巻き戻し」グループの次の項目が出ます(抜粋):
シミュレーター端末でステージ4「直前のコミットを取り消して変更は保持」をクリアする流れ:
git reset --soft HEAD~1 直前のコミットを取り消し、変更はステージに残す 注意
git reset HEAD~1 直前のコミットを取り消し、変更を未ステージに戻す
git reset --hard <commit> ブランチポインター・ステージ・作業ツリーをすべて commit に戻す 危険
git revert <commit> 打ち消し用の新しいコミットを作成。履歴は変わらず安全にプッシュできるuser@toolun-lab:~/project (main)$ git log --oneline
7f3a1c2 (HEAD -> main) wip: とっ散らかったコミット
2b9e0d4 init: add README
user@toolun-lab:~/project (main)$ git reset --soft HEAD~1
HEAD は現在 2b9e0d4 init: add README を指しています
--soft:ブランチポインターだけを移動し、ステージと作業ツリーは保持(取り消されたコミットの内容はステージ済みの状態)
ヒント:破棄されたコミット 7f3a1c2 は git reflog から復元できます
user@toolun-lab:~/project (main)$ git status -s
A app.js
A secret.env
✔ クリア:直前のコミットを取り消し、変更は保持しました。ほとんどの Git コマンドは「内容をある領域から別の領域へ運ぶ」と理解できます。作業ツリーは目に見えて編集できるファイル、ステージ(index)は「次のコミットがどうなるか」の一覧、ローカルリポジトリ(.git)はすべてのコミットを保存し、リモートリポジトリは別のマシンにある同じ一式です。
この図を理解すると、多くの「どう取り消すか」に共通の答えが出ます。間違えてもまだ add していなければ git restore <file> でステージから戻し、add したがコミットしたくないなら git restore --staged、コミットしてしまったら git reset、すでにプッシュ済みなら git revert で打ち消しのコミットを追加するだけです。
コミットオブジェクトは、ディレクトリツリー全体のスナップショット(差分ではない)、親コミットの id、作者と時刻、メッセージを記録します。これらを SHA-1(新しいリポジトリでは SHA-256 も選択可)でハッシュ化してコミット id を得るため、どこか1か所でも変われば——メッセージの1文字でも——まったく新しい id になります。これが --amend、rebase、cherry-pick が「履歴を書き換える」理由です。生成されるのは新しいコミットで、古いコミットは参照されなくなるだけです。
ブランチは .git/refs/heads/<name> にある40文字のファイルで、中身はあるコミットの id です。HEAD は通常、いずれかのブランチ名を指します。そのためブランチ作成は一瞬(小さなファイルを1つ書くだけ)、切り替えは HEAD の向き先を別の名前に変えて作業ツリーをそのコミットのスナップショットに更新すること、削除はポインターを消すだけで、コミット自体はすぐには消えません。
merge は起きたことを忠実に記録します。2本の線がマージコミットで合流し、この機能が並行して開発されたことが誰にでもわかります。rebase は履歴がずっと直線だったように見せ、git log は読みやすく git bisect は使いやすくなりますが、代償としてコミット id がすべて変わります。経験則はこうです。自分のもので、まだプッシュしていないブランチは自由に rebase してよい。他の人が基にしているかもしれないブランチは merge だけ。git pull --rebase はこのルールの日常的な適用で、未プッシュのローカルコミットをリモートの最新の後ろへ移し、「Merge branch 'main' of …」が並ぶのを避けます。
--soft は「コミットの分割/統合」に向いています。ポインターが戻り、内容はステージに残ります。--mixed(既定)は「何をコミットするか選び直す」のに向いています。--hard は本当の破棄です。作業ツリーの未コミット変更はどんな方法でも取り戻せません。一方、取り消されたコミットはオブジェクトストアに残っており、git reflog で HEAD の移動履歴を確認でき、git reset --hard HEAD@{1} で reset の直前へ戻れます。既定では reflog は90日間保持され(到達不能な項目は30日間)、これが Git の用意した「やり直しの窓」です。
「危険」は2種類のコマンドに付きます。作業ツリーの未コミット内容を破棄するもの(restore、reset --hard、clean、stash drop、checkout -- <file>)と、他の人がすでに取得しているかもしれない履歴を書き換えるもの(push --force、未マージブランチへの branch -D)です。「注意」は状態を変えるが取り戻せるもの、または影響範囲を先に確認すべきもの(commit --amend、rebase、merge --squash、push --delete)に付きます。読み取り専用のコマンド(log、diff、status、show、blame)には付きません。
git switch / git restore は 2.23 以降が必要で、旧来の checkout も併記しています。hash-object、cat-file、update-ref など)やプラットフォーム固有の操作(GitHub PR、GitLab MR のウェブ上の操作)は収録していません。reset の3モード、線形 rebase、stash、リモートの push/pull)を実装しています。対話的な rebase、bisect、サブモジュール、hooks、フックと設定ファイルの全オプションには対応しません。コンフリクトした rebase は、あなたの解決を待たずに自動的に中止します。.git も読み取らず、GUI のコンフリクト解決ツールも提供しません。「取り消し」で検索するか「取り消しと巻き戻し」グループを直接見て、まず「まだプッシュしていない」(reset / --amend)と「すでにプッシュした」(revert)の2つの状況を区別してからコマンドを選びます。「よく使う組み合わせ」には「main にコミットしてしまった内容を新しいブランチへ移す」といった完全なレシピがあります。
git rebase -i HEAD~N と squash / fixup / reword を組み合わせます。操作図の rebase カードでは、履歴が分岐から直線に変わる様子と、古いコミットが灰色になる理由を確認できます。
「リモート連携」グループは remote add から push -u、--force-with-lease までを扱い、練習端末のステージ8(プッシュ)とステージ9(プッシュ済みコミットの取り消し)が、よくある2回の「プッシュできない」をカバーします。
git reflog、git fsck --lost-found、git stash list の3つは「取り消しと巻き戻し」の中で隣り合っています。レシピ「誤って削除したブランチを取り戻す」は2ステップで完了します。
コミットをプッシュ済みかどうかで決まります。未プッシュなら reset でポインターを戻し、履歴はきれいなままです。プッシュ済みなら revert で打ち消しのコミットを追加し、他の人が取得済みの履歴を書き換えません。そうしないと、次に他の人が pull したときに分岐が生じます。
ローカルに未プッシュのコミットがあり、リモートにも新しいコミットがあるため、既定の pull が merge で両方を統合するからです。避けたい場合は git pull --rebase を使うか、git config --global pull.rebase true を一度設定します。
--force はリモートブランチを無条件に上書きします。--force-with-lease は、リモートブランチが前回 fetch したときに見たコミットのままか先に確認し、他の人が新しいものをプッシュしていれば拒否します。同僚のコミットを上書きしてしまう事故を防げます。履歴を書き換えた後のプッシュは必ず後者を使ってください。
本物の Git の id は、内容・作者・タイムスタンプをまとめてハッシュ化して得られます。シミュレーターは論理クロックで実時刻を置き換え、決定的なハッシュを使うため、同じ操作の並びなら同じ id になり、模範解答と照合しやすくなります。その id が本物の Git の計算結果と一致しないのは意図的です。
コマンド自体はどのプラットフォームでも同じです。違いはシェルにあります。PowerShell の && は 7.x が必要で、パスは引用符で囲むのが安全です。改行コードは「初期設定と構成」の core.autocrlf の項目に従って設定してください。
このページのすべてのデータ(コマンド一覧、操作図、シミュレーター端末)はページと一緒にダウンロードされる静的コンテンツで、あなたのブラウザー内で動作します。検索・コピー・お気に入り・練習のいずれもサーバーへリクエストを送信しません。お気に入りは端末の localStorage に保存され、サイトからは読み取れません。ページ上の外部リンクは Git 公式ドキュメントを指し、クリック後は相手サイト側で処理されます。
更新日 2026-09-09
149 件の Git コマンドを状況別に分類し、解説・例・危険度を掲載。検索・ワンクリックコピー・お気に入りに対応し、操作図と練習用シミュレーター端末も付属
このツールの翻訳は未完了です。一部は原文または代替言語で表示されます。
git init git init -b main # 初期ブランチ名を指定します
git clone https://github.com/git/git.git git clone git@github.com:user/repo.git my-dir
git clone --depth 1 --branch v2.0 https://github.com/user/repo.git
git clone -b develop https://github.com/user/repo.git
git config --global user.name "Zhang San" git config --global user.email "zs@example.com"
git config user.email "me@company.com"
git config --list --show-origin git config --get user.name
git config --global core.autocrlf input
git config --global alias.lg "log --oneline --graph --all" git lg
通常、Windows にはマネージャーが付属しています。 macOS はセキュリティを強化するために osxkeychain を使用します。
git help rebase git replace -h # 短い使用法
git status git status -s # 短い形式: M 変更 A 追加 D 削除 ??追跡されていません
git add src/app.js git add src/ # ディレクトリ全体 git add "*.md" # ワイルドカード
git add -A git add -u # 新しいファイルを除き、追跡されたファイルの一時的な変更と削除のみが保存されます。
git add -p src/app.js # y この部分を一時的に保存します n スキップ s 小さな部分に分割します q 終了します
git commit -m "修正: ログインタイムアウト判定を修正"
git commit -am "docs: update readme"
コミットしたくない変更を取り入れるのは簡単です。コミットする前に git status を実行してください。
git add forgotten.js git commit --amend --no-edit #ファイルを追加しますが、説明は変更しません git commit --amend -m "新しい説明"
新しいコミット ID を生成します。すでにプッシュされているコミットは修正しないでください。修正しない場合は、プッシュする必要があります。
git diff git diff src/app.js # 1 つのファイルのみを表示
git diff --staged
git diff main feature git diff HEAD~3 HEAD -- src/ git diff main...feature # フォークポイントに関連した機能の変更
git diff --stat HEAD~1
git diff --word-diff=color README.md
git log git log -5 # 最新の 5 エントリ git log --oneline # 1 行に 1 行
git log --oneline --graph --all --decorate
git show HEAD git show a1b2c3d --stat git show HEAD:src/app.js # 特定のバージョンのファイルの内容を表示する
git rm old.txt git rm -r legacy/
git rm --cached .env echo ".env" >> .gitignore
git mv utils.js helpers.js
git branch git Branch -a # リモート ブランチを含む git Branch -vv # 最新のコミットと追跡関係を使用
git branch feature/login git Branch hotfix a1b2c3d # 指定されたコミットから作成
git switch main git switch - # 前のブランチに戻ります
git switch -c feature/search git switch -c hotfixorigin/main # リモートブランチに基づく
git checkout -b release/1.2
git branch -m master main git push -u origin main && git push origin --delete master
git branch -d feature/login
git branch -D experiment
ブランチ上の固有のコミットは孤立し、短期的には reflog を使用して取得できます。
git branch --merged main git Branch --no-merged # 逆に
git branch -u origin/feature/login
git branch -a --contains a1b2c3d
git checkout v1.0 git switch -c fix-from-v1 # 変更を保持したい場合は、ここにブランチを作成します
この状態のコミットはどのブランチにも属さないため、切断されると簡単に失われます。
git branch --sort=-committerdate | head
git fetch -p git remote prune origin
git switch main git merge feature/login
git merge --no-ff feature/login
git merge --squash feature/login git commit -m "feat: login"
git merge --abort
git add src/app.js git commit #デフォルトの説明 ブランチをマージ...
git checkout --theirs package-lock.json git add package-lock.json
リベースすると、ours と theirs の意味が逆になります。つまり、ours がリベースされるブランチです。
git switch feature git rebase main
移動されたすべてのコミット ID は変更されます。プッシュされ、誰かが作業しているブランチはリベースしないでください。
git rebase -i HEAD~3 # pick keep reword 説明を変更します squash 前のものにマージします fixup merge し、説明を失います drop delete
git add . git rebase --continue
git rebase --abort
git rebase --onto main server client
「間違った場所に支店を開設した」という状況に適しています。
git commit --fixup a1b2c3d git rebase -i --autosquash a1b2c3d~1
git cherry-pick a1b2c3d git Cherry-pick a1b2c3d..e5f6g7h # 範囲(a1b2c3dを除く)
git cherry-pick -n a1b2c3d
git config --global merge.tool vscode git config --global mergetool.vscode.cmd "code --wait $MERGED" git mergetool
git restore src/app.js git 復元 。 # ディレクトリ全体
ステージングされていない変更は直接失われ、Git を使用して取得することはできません。
git restore --staged src/app.js git replace HEAD src/app.js #古い書き方
git restore --source HEAD~2 config.yml git restore --source v1.0 -- src/
git reset --soft HEAD~1 git commit -m "より適切な説明"
git reset HEAD~1
git replace --hard HEAD~1 # 最後のコミットを破棄します git replace --hardorigin/main # リモートとまったく同じ
ワークスペースの変更は元に戻すことができません。コミットされたものは git reflog を使用して取得できます。
git reset package-lock.json
git revert HEAD git revert a1b2c3d --no-edit
git revert --no-commit HEAD~3..HEAD git commit -m "revert last 3 commits"
git revert -m 1 f00ba12
マージを元に戻した後、同じブランチにマージする前に、この取り消しを元に戻す必要があります。
git reflog
git replace --hard HEAD@{2} # 手順 2 の前の状態に戻ります
git ブランチレスキュー a1b2c3d # 孤立したサブミッション用のブランチを作成しますgit clean -n # 削除される内容をプレビューする git clean -fd # 実行 git clean -fdx # .gitignore 内の無視されたもの (node_modules など) も削除します
git checkout -- src/app.js
git fsck --lost-found git show <dangling-commit-id>
git fsck --unreachable | grep commit | cut -d" " -f3 | xargs git log --merges --no-walk
git remote -v
git remote add origin git@github.com:user/repo.git
git remote set-url origin git@github.com:user/repo.git
git remote rename origin upstream
git remote remove upstream
git fetch git fetch origin main git fetch --all --prune
git pull git pull origin main
git pull --rebase origin main
git push git push origin main
git push -u origin feature/login
git push origin --delete feature/old git Push Origin --delete v0.1 # リモート タグを削除することもできます
git push --force-with-lease origin feature/login
--force よりもこれを優先して使用してください。
git push -f origin feature/login
他の人がプッシュした投稿は消去されます。ブランチの共有は禁止されています。
git push --all origin
git ls-remote --heads origin git ls-remote --tags https://github.com/git/git.git
git remote add upstream https://github.com/original/repo.git git fetch upstream git switch main && git merge upstream/main
git pull --ff-only
git stash git stash Push -m "半完成したログインページ"
git stash -u git stash -a # 無視されたファイルも収集する
git stash list
git stash pop
git stash pop stash@{2}git stash apply stash@{1}git stash show -p stash@{0}git stash drop stash@{0}
git stash clear # すべて削除git stash branch fix-from-stash stash@{0}git stash Push -m "スタイルのみを折りたたむ" -- src/styles/
git tag git tag -l "v1.*" # パターンでフィルタリングする
git tag -a v1.2.0 -m "Release 1.2.0"
git tag build-2026-09-09
git tag -a v1.1.1 a1b2c3d -m "メイクアップ"
git show v1.2.0
git tag -d v1.2.0
git push origin --delete v1.2.0
git describe --tags --always
git submodule add https://github.com/user/lib.git vendor/lib
git submodule update --init --recursive
git clone --recurse-submodules https://github.com/user/repo.git
git submodule update --remote vendor/lib git add vendor/lib && git commit -m "bump lib"
git submodule status
git submodule deinit -f vendor/lib git rm -f vendor/lib rm -rf .git/modules/vendor/lib
git worktree add ../repo-hotfix hotfix/1.2.1 git worktree add -b review ../repo-review origin/pr-42
git worktree list
git worktree remove ../repo-hotfix git worktree prune # 手動で削除されたディレクトリの登録をクリーンアップする
git clone --filter=blob:none --sparse <url> cd repo && git sparse-checkout set apps/web packages/ui
git log -p -- src/app.js git log --follow -- src/app.js # クロスリネーム追跡
git log --grep="login" -i --oneline
git log -S"validateToken" --oneline git log -G"regex" --oneline # 通常版
git log main..feature --oneline git logorigin/main..HEAD # まだプッシュされていないコミット
git log --pretty=format:"%h %ad %an %s" --date=short -10
git log --since="2026-09-01" --until="2026-09-09" --oneline
git shortlog -sn --all --no-merges
git blame -L 40,60 src/app.js gitblame -w -C src/app.js # 空白を無視し、移動を追跡します
git bisect start git bisect bad # 現在悪い git bisect Good v1.1.0 # このバージョンは良いです # 繰り返しテストして git bisect を実行します。 git bisect reset
git bisect run npm test
git grep -n "TODO" -- "*.ts" git grep "foo" v1.0 # 特定のバージョンで検索
git show HEAD~5:src/config.js > old-config.js
git diff --name-only HEAD~3 HEAD git diff --name-status main # M/A/D ステータス
git count-objects -vH
git gc --aggressive --prune=now
pruneは実際に到達不可能なオブジェクトを削除し、reflog内の後悔の薬も一緒に消えます。
git rev-parse --short HEAD git rev-parse --abbrev-ref HEAD git rev-parse --show-toplevel # ウェアハウスのルート ディレクトリ
git archive -o release.zip v1.2.0 git archive HEAD src/ | tar -x -C /tmp/out
# .gitignore node_modules/ dist/ *.log .env* !.env.example
git check-ignore -v dist/app.js
git rm -r --cached . git add . git commit -m "chore: apply .gitignore"
echo ".DS_Store" >> ~/.gitignore_global git config --global core.excludesFile ~/.gitignore_global
git update-index --skip-worktree config/local.php git update-index --no-skip-worktree config/local.php # キャンセル
* text=auto *.sh text eol=lf *.png binary *.psd filter=lfs diff=lfs merge=lfs -text
git lfs install git lfs track "*.psd" git add .gitattributes
いくつかのコマンドを「これをやりたい」というレシピにまとめたものです。展開するとまとめてコピーできます。
コミットが早すぎました / 説明が間違って書かれていました / 2 つのコミットに分割したい (まだプッシュされていません)
git reset --soft HEAD~1送信して取り消します。変更はまだステージング領域にありますgit statusファイルがすべて「送信される変更」にあることを確認しますgit commit -m "新しい説明"他の人がすでにそれを取得している可能性がありますが、歴史は書き換えられません。
git revert <commit>リバースコミットを生成するgit pushローカル実験がめちゃくちゃになってしまったので、特定のコミットまで完全に戻したい
git log --onelineターゲットのコミットIDを見つけるgit stash -u(オプション) 最初に保持したい変更を折りたたみます。git reset --hard <commit>ブランチを開くのを忘れて N 回送信してしまいました。
git branch feature/x現在の場所にブランチを作成します (これらのコミットを「保存」します)git reset --hard origin/mainメインがリモート状態に戻るgit switch feature/xPRを開く前に履歴を整理する(他の人がブランチを使用していない)
git rebase -i HEAD~4次の行の pick を squash または fixup に変更します。git push --force-with-leaseブランチがプッシュされている場合にのみ必要ですmain には新しいコミットがあり、feature ブランチはその上に継続する必要があります
git fetch origingit switch feature/xgit rebase origin/mainまたは git mergeorigin/main (マージコミットを維持)デフォルトのブランチ名を統一する
git branch -m master maingit push -u origin maingit push origin --delete masterまず、デフォルトのブランチをホスティング プラットフォームの main に切り取ります。git Branch -D の後に便利であることがわかりました
git reflogブランチの最後のコミットの ID を検索します (「commit: xxx」など)。git branch <name> <commit-id>.env または数百 MB のファイルが履歴に入力されました
git rm --cached .env && echo ".env" >> .gitignore最新のコミットのみが作成された場合: git commit --amendgit filter-repo --path .env --invert-pathsすでに履歴の奥深くにある: git-filter-repo ですべての履歴を書き換えます (別途インストールする必要があります)git push --force-with-lease --allすべてのコラボレーターを再クローンする必要があります。いずれにせよ、漏洩したキーは無効化して再発行する必要がありますメインで修正されたバグもリリース/1.2 に移動されます。
git switch release/1.2git cherry-pick <commit>git pushgit merge / pull レポート CONFLICT
git statusどの文書が「双方によって変更された」かを確認するcode <file>エディターで <<<<<<< ======= >>>>>> タグを処理し、正しいコンテンツを保持しますgit add <file>それぞれが修正されたら 1 つ追加しますgit commitリベースするときは git rebase -- continue最初にコードをローカルで記述し、次に GitHub 上にウェアハウスを構築しました。
git init -b main && git add -A && git commit -m "init"git remote add origin git@github.com:user/repo.gitgit push -u origin main丸はコミット、矢印は親コミットを指します。緑のラベルはブランチ、紫は HEAD があるブランチを示します。灰色の丸はどのブランチからも参照されていないコミット(reflog で復元可能)、塗りつぶしの丸は今回の操作で新しく作られたコミットです。
git add . && git commit -m "…"各コミットは自分の親コミットを記憶します。ブランチはコミットを指す可動ポインタにすぎず、コミットすると main と HEAD が一緒に進みます。
git switch -c feature新しいブランチと main は同じコミットを指すため、作成は一瞬です。その後 feature でコミットすると、進むのは feature だけです。
git switch main && git merge feature新しいコミットは作られず、履歴は一直線のままです。ここにブランチが存在した記録を残したい場合は --no-ff を使います。
git merge featureGit は共通の祖先 b2 を見つけ、b2 に対する両側の変更をまとめて、親コミットを2つ持つ m6 を生成します。同じ箇所の変更が異なる場合にのみ競合します。
git switch feature && git rebase main履歴は一直線になりますが、c3 と d4 は新しいコミット c3′ と d4′ に置き換わります(id が変わります)。すでに push したブランチを rebase するのは避けてください。でないと、他の人の履歴と衝突します。
git reset --hard HEAD~1--soft はポインタだけを移動します。--mixed はさらにステージングエリアを空にします。--hard は作業ツリーも元に戻します。孤立したコミット c3 は reflog から復元できます(デフォルトで 30 日以上保持)。
git revert HEADc3 は履歴に残り、新しいコミット r4 の内容は c3 の変更を逆にしたものです。すでに push したコミットを取り消す場合は reset ではなく revert を使います。
git cherry-pick x7x7 が親コミットに対して行った変更を main 上に再生し、内容は同じで id が異なる x7′ を作ります。特定の修正だけをリリースブランチに持っていくのに適しています。
メモリ上だけで動く Git シミュレーターです(本物の Git ではなく、ネットワークにも接続しません):init / add / commit / branch / switch / merge / rebase / reset / revert / stash / tag / remote / push / pull などのよく使うサブコマンドに対応し、右側のコミットグラフはリアルタイムで更新されます。全10レベルは「最初のコミット」から「マージコンフリクトの解決」まで。Linux コマンドの練習はLinux コマンド早見表。