🐙 Git と GitHub CLI
バージョン管理、ブランチ、リモートリポジトリ、スタッシュ、タグ、そして GitHub CLI の基本および高度な Git コマンド。
🔹 基本コマンド
コマンド |
例 |
説明 |
|---|---|---|
git add |
ファイルをステージ領域に追加 | |
git add file.txt |
次のコミットのために特定のファイルをステージ |
|
git add . |
現在のディレクトリ以下のすべての変更をステージ |
|
git add -p |
インタラクティブにファイルの一部をステージ (部分的なコミットに便利) |
|
git clone |
リポジトリを新しいディレクトリに複製 | |
git clone -b branch_name URL |
デフォルトではなく指定したブランチのみをクローン |
|
git clone --depth 1 URL |
最新のコミットだけをクローンし、時間と容量を節約する浅いコピーを作成 |
|
git commit |
リポジトリに変更を記録 | |
git commit -m "Initial commit" |
エディタを開かずにメッセージ付きでコミット |
|
git commit -a -m "Fix bugs" |
変更された追跡ファイルをすべてステージしてコミット |
|
git commit --amend |
直前のコミットを更新 (メッセージ変更や追加変更を含める) |
|
git commit --fixup abc1234 |
後でインタラクティブリベース中に自動的に squash される fixup コミットを作成 |
|
git config |
リポジトリまたはグローバルの設定を取得・変更 | |
git config --global user.name "Name" |
グローバル Git ユーザー名を設定 |
|
git config --global user.email "email@example.com" |
グローバル Git メールアドレスを設定 |
|
git config --list |
すべての Git 設定を一覧表示 (名前、メール、エディタなど) |
|
git diff |
コミット間、コミットと作業ツリー間の変更を表示 | |
git diff HEAD |
最後のコミット以降の変更を表示 (未ステージの変更) |
|
git diff --staged |
次のコミットに含まれる変更を表示 |
|
git diff --word-diff HEAD~1 |
単語単位の差分を表示 |
|
git grep |
リポジトリ内のファイルを検索 | |
git grep "functionName" |
プロジェクト内のすべてのファイルで |
|
git grep -n "TODO" |
|
|
git grep -i "login" |
|
|
git init |
空の Git リポジトリを作成、または既存リポジトリを再初期化 | |
git init my-project |
ディレクトリ my-project で新しいリポジトリを初期化 |
|
git init --bare |
ベアリポジトリを初期化 |
|
git log |
コミットログを表示 | |
git log --oneline |
コンパクトな1行形式で履歴を表示 |
|
git log --graph --all |
すべてのブランチを視覚的なコミットグラフで表示 |
|
git log -p --stat |
コミットのパッチとファイル変更統計を表示 |
|
git reset |
ファイルをアンステージする (作業ディレクトリの変更は保持) | |
git reset HEAD file.txt |
ステージからファイルを削除 (編集は保持) |
|
git reset --hard HEAD~1 |
1つ前のコミットに戻り、すべての変更を削除 (元に戻せない!) |
|
git reset --soft HEAD~1 |
最後のコミットを取り消し、変更は再コミット可能な状態で保持 |
|
git reset --mixed HEAD~1 |
コミットを取り消し、変更は作業ディレクトリに未ステージで保持 |
|
git show |
さまざまなオブジェクトを表示 | |
git show <commit_hash> |
特定のコミットの変更とメッセージを表示 |
|
git show HEAD~1 |
現在の1つ前のコミットを表示 |
|
git show --stat |
最新のコミットのファイル変更の概要を表示 |
|
git status |
作業ツリーの状態を表示 | |
git status -s |
短い形式で状態を表示 |
|
git status -b |
現在のブランチとファイルの状態を表示 |
🌿 ブランチとマージ
コマンド |
例 |
説明 |
|---|---|---|
git branch |
ブランチを作成・一覧表示・削除 | |
git branch new-feature |
|
|
git branch -d old-feature |
|
|
git checkout |
ブランチを切り替える、または別のコミットからファイルを復元 | |
git checkout main |
|
|
git checkout -b new-branch |
|
|
git switch |
ブランチを切り替える (checkout の簡略版) |
|
git switch main |
|
|
git switch -c feature-x |
|
|
git switch new-feature |
|
|
git merge |
他のブランチの変更を現在のブランチに統合 | |
git merge new-feature |
|
|
git merge --no-ff new-feature |
常にマージコミットを作成 (たとえ fast-forward が可能でも) |
|
git merge --abort |
競合が発生した場合にマージをキャンセルして変更を元に戻す |
|
git rebase |
コミットを新しいベースコミットに移動または再適用 | |
git rebase main |
自分のブランチのコミットを |
|
git rebase -i HEAD~3 |
直近3つのコミットをインタラクティブに編集 |
|
git rebase --abort |
進行中のリベースを中止して元に戻す |
|
git rebase -i --autosquash HEAD~5 |
インタラクティブリベース中に fixup/squash マーク付きコミットを自動的に squash |
|
git cherry-pick |
別ブランチの特定のコミットを適用 | |
git cherry-pick <hash> |
特定のコミット (ハッシュ指定) を現在のブランチに適用 |
|
git cherry-pick --continue |
競合解決後に cherry-pick を続行 |
|
git cherry-pick A^..B |
|
📡 リモートリポジトリ
コマンド |
例 |
説明 |
|---|---|---|
git remote |
リモートリポジトリ (GitHub など) へのリンクを管理 | |
git remote -v |
リモート名とその URL を表示 |
|
git remote add origin URL |
|
|
git pull |
リモートブランチから変更をダウンロードして自動的にマージ | |
git pull origin main |
リモート |
|
git pull --rebase origin main |
マージではなく、現在のブランチをリモートの上にリベース |
|
git push |
ローカルの変更をリモートリポジトリにアップロード | |
git push origin main |
ローカルの |
|
git fetch |
リモートから変更をダウンロード (マージはしない) | |
git fetch origin |
リモート |
|
git fetch origin main |
リモートから |
|
git fetch --all |
すべてのリモートから更新を取得 |
|
git fetch --prune |
削除されたリモートブランチのローカル参照を整理 |
|
git fetch --dry-run |
実際にダウンロードせず、何が取得されるかを表示 |
|
git fetch origin +main |
ローカルトラッキングブランチ ( |
📦 スタッシュとクリーンアップ
コマンド |
例 |
説明 |
|---|---|---|
git stash |
未コミットの変更 (作業中) を一時保存 | |
git stash |
変更済みファイルとステージ済みファイルを保存し、作業ディレクトリを最後のコミットに戻す |
|
git stash apply |
最新のスタッシュを再適用 (スタッシュは保持) |
|
git stash pop |
最新のスタッシュを再適用して削除 |
|
git stash list |
すべてのスタッシュを一覧表示 |
|
git stash branch feature-fix |
新しいブランチを作成し、最新のスタッシュを適用 |
|
git clean |
Git に含まれない未追跡ファイルを完全に削除 | |
git clean -f |
現在のディレクトリの未追跡ファイルを削除 |
|
git clean -fd |
未追跡のファイルとフォルダを削除 |
|
git clean -n |
削除対象をプレビュー (安全なドライラン) |
🏷️ タグ
コマンド |
例 |
説明 |
|---|---|---|
git tag |
特定の履歴ポイント (リリースなど) をマークするタグを作成・一覧表示・削除 | |
git tag -a v1.0 -m "Version 1.0" |
|
|
git tag -d v1.0 |
ローカルの |
|
git push |
ローカルからリモートリポジトリにコミット、ブランチ、タグをアップロード | |
git push origin --tags |
すべてのローカルタグをリモートにプッシュ (複数バージョンのタグ後に便利) |
|
git push origin v1.0 |
特定のタグ (例: |
|
git push origin :refs/tags/v1.0 |
リモートタグ |
🛠️ コンフリクト解決
コマンド |
例 |
説明 |
|---|---|---|
git mergetool |
マージコンフリクトを解決するためのビジュアルツールを開く | |
git mergetool --tool=meld |
Meld などの特定ツールを使ってコンフリクトを修正 |
|
git rerere |
過去に解決したマージコンフリクトの方法を Git に記憶させる | |
git config --global rerere.enabled true |
過去のコンフリクト解決を自動的に再利用可能にする |
|
git rerere status |
保存されたコンフリクト解決を持つファイルを表示 |
|
git rerere diff |
将来の再利用用に Git が保存した変更を表示 |
⚙️ 高度なコマンド
コマンド |
例 |
説明 |
|---|---|---|
git bisect |
バイナリサーチでバグを導入したコミットを特定 | |
git bisect start |
既知の良いコミットと悪いコミットの間でバイナリサーチを開始 |
|
git bisect bad |
現在のコミットを「bad」(バグあり) とマーク |
|
git bisect good <commit> |
バグが存在しない既知の「good」コミットをマーク |
|
git blame |
ファイル内の各行を最後に変更した人物を表示 (リビジョンと著者付き) | |
git blame file.txt |
ファイル内の各行の著者とコミット情報を表示 |
|
git blame -L 10,20 file.txt |
10行目から20行目のみの blame 情報を表示 |
|
git blame --show-email file.txt |
行変更と一緒に著者のメールアドレスを表示 |
|
git reflog |
ブランチ移動や HEAD のリファレンスログ (reflog) を表示・管理 | |
git reflog show main@{1.week.ago} |
|
|
git reflog expire --expire=30.days --dry-run |
30日以上前のエントリが削除可能かをプレビュー (変更なし) |
|
git reflog delete HEAD@{2} |
特定の reflog エントリを削除 (リカバリに影響する可能性あり注意) |
|
git submodule |
サブモジュール (リポジトリ内のリポジトリ) を追加・初期化・更新・確認 | |
git submodule add URL path |
外部リポジトリを指定したパスにサブモジュールとして追加 |
|
git submodule update --init |
リポジトリ内のすべてのサブモジュールを初期化・ダウンロード |
|
git submodule foreach git pull |
各サブモジュール内で |
|
git submodule sync --recursive |
|
|
git submodule update --remote --merge |
サブモジュールをリモートブランチの最新コミットに更新 |
|
git archive |
特定のコミットやブランチからファイルのアーカイブ (zip, tar など) を作成 | |
git archive --format=zip HEAD > archive.zip |
現在の HEAD からプロジェクトファイルの ZIP アーカイブを作成 |
|
git archive -o release.tar.gz HEAD |
現在の HEAD から圧縮 |
|
git archive --format=tar --prefix=project/ HEAD \| gzip > project.tar.gz |
現在のプロジェクトの圧縮 |
|
git gc |
不要なファイルを削除し、リポジトリを最適化 | |
git gc --aggressive |
徹底的なクリーンアップと最適化を実行 (時間がかかるが効果的) |
|
git gc --prune=now |
すべての到達不能オブジェクトを即削除 (不明な場合は危険) |
|
git shortlog |
著者とそのコミットの簡易要約 | |
git shortlog -e |
著者とメールアドレスの一覧を表示 (誰がどれだけ貢献したか分析可能) |
|
git shortlog -s -n |
各著者が行ったコミット数を表示し、数でソート |
|
git shortlog -sne |
上記に名前とメールアドレスも含める — 詳細な活動追跡に便利 |
|
git revert |
履歴を書き換えずに以前のコミットの変更を取り消す新しいコミットを作成 | |
git revert HEAD |
最後のコミットを取り消し、その変更を逆にする新しいコミットを作成 |
|
git revert <commit_hash> |
ハッシュ指定の特定コミットを取り消し、それを逆にする新しいコミットを安全に追加 |
🐙 GitHub CLI
ghを使うとターミナルから GitHub を操作できます。
コマンド |
例 |
説明 |
|---|---|---|
gh auth login |
GitHub ホストで認証し、CLI コマンドがアカウントと連携できるようにする | |
gh auth login --with-token < mytoken.txt |
個人アクセストークンをファイル ( |
|
gh auth login --hostname enterprise.internal |
GitHub Enterprise サーバー (github.com 以外) に認証 |
|
gh repo clone |
GitHub リポジトリをローカル環境にクローン | |
gh repo clone user/repo |
|
|
gh repo clone cli/cli -- --depth=1 |
最新のコミットだけをダウンロードし、高速で小さなクローンを作成 |
|
gh repo clone cli/cli workspace/cli |
カスタムフォルダ |
|
gh issue list |
GitHub リポジトリの Issue を一覧表示 (さまざまな条件でフィルタ可能) | |
gh issue list --assignee "@me" |
自分に割り当てられた Issue を表示 |
|
gh issue list --state all |
状態 (open/closed) を問わず Issue を表示 |
|
gh issue list --search "error no:assignee sort:created-asc" |
“error” に一致する、担当者なし、作成日昇順の Issue を表示 |
|
gh pr create |
CLI 経由で GitHub にプルリクエストを作成 | |
gh pr create --title "..." |
指定したタイトルでプルリクエストを作成 |
|
gh pr create --project "Roadmap" |
プルリクエストを “Roadmap” という GitHub プロジェクトにリンク |
|
gh pr create --base develop --head monalisa:feature |
フォーク |
|
gh repo create |
CLI から新しい GitHub リポジトリを作成 | |
gh repo create my-project |
GitHub に |
|
gh repo create my-project --public --clone |
公開リポジトリを作成してローカルにクローン |
|
gh repo create my-project --private --source=. --remote=upstream |
現在のフォルダからプライベートリポジトリを作成し、 |
💡 Git エイリアス (便利なショートカット)
よく使う Git コマンドのエイリアスを設定して作業を高速化:
git config --global alias.br branch # ショートカット: git branch
git config --global alias.ci commit # ショートカット: git commit
git config --global alias.co checkout # ショートカット: git checkout
git config --global alias.graph "log --oneline --graph --all --decorate" # 見やすい履歴グラフ
git config --global alias.last "log -1 HEAD" # 最後のコミットを表示
git config --global alias.st status # ショートカット: git status🚀 プロ向け高度な Git コマンド
コマンド |
例 |
説明 |
|---|---|---|
git filter-repo |
Git 履歴を書き換える強力で高速なツール。ファイルや著者情報、パスを削除/変更可能。従来の git filter-branch を置き換え、より安全で高速。 | |
git filter-repo --path secret.txt --invert-paths |
|
|
git filter-repo --replace-text replacements.txt |
リポジトリ全体の履歴で文字列やパターンを一括置換 (例: 資格情報の削除) |
|
git filter-repo --subdirectory-filter src |
サブディレクトリの履歴を新しいリポジトリに抽出し、コミットメタデータを保持 |
|
git worktree |
1つのリポジトリに複数の作業ディレクトリを紐づけ、異なるブランチで同時作業を可能に (クローン不要) | |
git worktree add ../feature feature-branch |
同じリポジトリに追加の作業ツリーを作成し、並行してブランチをチェックアウト |
|
git worktree list |
すべてのアクティブな worktree、パス、ブランチを一覧 |
|
git worktree remove ../feature |
不要になった worktree を削除し、安全にディレクトリをクリーンアップ |
|
git replace |
既存オブジェクトを置き換える一時参照を作成し、履歴を破壊せずにローカルでテスト・操作可能 | |
git replace <old_commit> <new_commit> |
ローカルリポジトリで一時的にコミットを差し替え、履歴を書き換えずにテストやパッチ適用 |
|
git replace --list |
アクティブな置換参照をすべて表示 |
|
git replace -d <replace_ref> |
特定の置換参照を削除して動作を元に戻す |
|
git stash |
未コミットの変更をスタックに一時保存し、未完了作業をコミットせずにコンテキストを切り替え可能 | |
git stash push -p |
インタラクティブに保存する差分を選択し、細かく制御してスタッシュ |
|
git stash push -m "WIP selective stash" |
識別しやすいカスタムメッセージ付きでスタッシュを作成 |
|
git stash apply stash@{2} |
スタッシュ一覧から特定のスタッシュを適用 (削除はしない) |
|
git rebase |
別のベースコミット上にコミットを再適用し、履歴をきれいに線形に整える。インタラクティブ編集も可能 | |
git rebase --interactive --autosquash |
fixup/squash マーク付きコミットを自動的に整理・結合するインタラクティブリベースを開始 |
|
git rebase -i --autosquash HEAD~10 |
fixup/squash コミットを自動的に整理・結合し、プッシュ前に履歴をクリーン化 |
|
git commit --fixup <commit> |
インタラクティブリベースで自動的に squash される fixup コミットを作成 |
|
git commit --squash <commit> |
リベース時に特定のコミットと結合される squash コミットを作成 |
|
git bisect |
バイナリサーチでバグを導入したコミットを効率的に特定。連続するコミットをテストし、原因を絞り込み | |
git bisect run |
テストスクリプトを各コミットで実行し、自動でバグを導入したコミットを特定 |
|
git bisect start; git bisect bad; git bisect good v1.0; git bisect run ./test.sh |
テストスクリプトによる自動二分探索でバグ特定を大幅に高速化 |
|
git bisect visualize |
二分探索プロセスを可視化する GUI ツールを開く |
|
git bisect reset |
bisect モードを終了し、元の HEAD に戻る |
|
git commit |
修正、署名、fixup、メッセージカスタマイズなどの詳細オプション付きでコミットを記録し、履歴品質を維持 | |
git commit --gpg-sign |
GPG キーで署名付きコミットを作成し、真正性と著者を暗号的に検証可能 |
|
git commit -S -m "Signed commit" |
GPG キーでコミットを署名し、完全性と著者確認を保証 |
|
git config --global user.signingkey <key_id> |
コミット署名に使用する GPG キーをグローバル設定 |
|
git log --show-signature |
コミットの GPG 署名情報を検証して表示 |
|
git reflog |
HEAD やブランチの更新ログを保持し、失われたコミットの復元やローカル履歴の把握に不可欠 | |
git reset --hard HEAD@{3} |
リフログからブランチを以前の状態にリセットし、変更を復元または取り消し |
|
git reflog expire --expire=now --all |
すべてのリフログエントリを即時削除し、履歴をクリーンアップ (注意) |
🧰 プロ向けワークフローのヒントと自動化
トピック |
コマンド / 例 |
解説 & プロのヒント |
|---|---|---|
積極的なリポジトリクリーンアップ |
git gc --aggressive --prune=now |
ガベージコレクションを深く実行し、到達不能オブジェクトを即削除して最適化。メンテナンス時に使用 |
並行ブランチ作業ツリー |
git worktree add ../feature-branch feature |
複数の作業ツリーを保持して同時に機能開発を行い、クローンのオーバーヘッドを回避 |
クリーンで線形な履歴 |
git rebase -i --autosquash |
プッシュ前にインタラクティブリベースと autosquash を行い、履歴を読みやすく維持 |
セキュアなコミット |
git commit -S |
コミットに GPG 署名を付与し、共有リポジトリでの信頼性を高める (多くの企業環境で必須) |
自動バイセクト |
git bisect run ./test-script.sh |
バグ探索を自動化。テストスクリプトを各候補コミットで実行し、原因を迅速特定 |
コンフリクト解決キャッシュ |
git config --global rerere.enabled true |
過去の解決方法を再利用して、リベースやマージ時の繰り返しコンフリクト解決を高速化 |
共有エイリアスとフック |
共通の Git エイリアスやコミットフックを共有リポジトリや CI パイプラインに保存し、チーム標準を強制して生産性向上 |
追加リソース
🧠 ヒント
すべてを暗記しようとせず、--help を使い、調べ、定期的に練習しましょう:
git help <command>
git status🌐 便利なリンク
📘 公式 Git ドキュメント — すべての Git コマンドの詳細マニュアル:
https://git-scm.com/docs
📙 Learn Git Branching — ブランチ概念を習得するためのインタラクティブなビジュアルチュートリアル:
https://learngitbranching.js.org
📕 Pro Git 書籍 (無料, Scott Chacon & Ben Straub 著):
https://git-scm.com/book
📗 Git チートシート (公式簡易リファレンス):
https://education.github.com/git-cheat-sheet-education.pdf