ToolActToolAct

Git コマンドリファレンス

完全なGitコマンド参照マニュアル、カテゴリ別整理で迅速検索

すべて: 65 个命令

基本コマンド(13)

git init

現在のディレクトリに新しいGitリポジトリを作成

git clone <url>

リモートリポジトリをローカルにクローン

git clone --depth=1 <url>

浅いクローン、最新コミットのみ取得

git add <file>

ファイルをステージングエリアに追加

git add .

すべての変更をステージングに追加

git commit -m "message"

ステージングの変更をコミット

git commit --amend

最後のコミットを修正

git status

リポジトリの現在状態を表示

git diff

未ステージングの変更を表示

git diff --staged

ステージング済みの変更を表示

git config --list

すべての設定を表示

git config --global user.name "name"

グローバルユーザー名を設定

git config --global user.email "email"

グローバルメールアドレスを設定

ブランチ管理(14)

git branch

すべてのローカルブランチを一覧

git branch -a

すべてのブランチ(リモート含む)を一覧

git branch <name>

新しいブランチを作成

git branch -d <name>

ブランチを削除

git branch -m <old> <new>

ブランチ名を変更

git checkout <branch>

ブランチを切り替え

git checkout -b <branch>

新規ブランチを作成して切り替え

git switch <branch>

ブランチを切り替え(Git 2.23+)

git switch -c <branch>

新規ブランチを作成して切り替え(Git 2.23+)

git merge <branch>

指定ブランチを現在のブランチにマージ

git merge --no-ff <branch>

マージコミットを作成してマージ

git rebase <branch>

現在ブランチを指定ブランチにリベース

git rebase --continue

コンフリクト解決後にリベース継続

git cherry-pick <commit>

特定コミットを現在ブランチに適用

リモート操作(10)

git remote -v

リモートリポジトリの詳細を表示

git remote add <name> <url>

リモートリポジトリを追加

git fetch <remote>

リモートから最新コンテンツを取得

git fetch --all

すべてのリモートから更新を取得

git pull <remote> <branch>

リモートブランチを取得してマージ

git pull --rebase

取得してリベース

git push <remote> <branch>

リモートリポジトリにプッシュ

git push -f

強制プッシュ(注意して使用)

git push -u origin <branch>

プッシュして上流ブランチを設定

git push origin --delete <branch>

リモートブランチを削除

変更取消(8)

git reset <file>

ファイルをアンステージ

git reset --soft HEAD~1

最後のコミットを取消、変更を保持

git reset --mixed HEAD~1

コミットとステージングを取消、作業ディレクトリを保持

git reset --hard HEAD~1

コミットを取消、すべての変更を破棄

git revert <commit>

コミットを取消(新コミット作成)

git restore <file>

作業ディレクトリのファイルを復元(Git 2.23+)

git restore --staged <file>

ファイルをアンステージ(Git 2.23+)

git clean -fd

未追跡ファイルとディレクトリを削除

タグ管理(6)

git tag

すべてのタグを一覧

git tag <name>

軽量タグを作成

git tag -a <name> -m "msg"

注釈付きタグを作成

git tag -d <name>

ローカルタグを削除

git push origin <tag>

タグをリモートにプッシュ

git push --tags

すべてのタグをリモートにプッシュ

履歴表示(7)

git log

コミット履歴を表示

git log --oneline

簡潔なコミット履歴を表示

git log --oneline --graph --all

すべてのブランチ履歴をグラフ表示

git show <commit>

コミット詳細を表示

git blame <file>

各行の修正履歴を表示

git reflog

すべての操作履歴を表示

git bisect start

問題コミットの二分探索開始

スタッシュ(7)

git stash

現在の変更をスタッシュ

git stash save "message"

メッセージ付きでスタッシュ

git stash list

すべてのスタッシュを一覧

git stash pop

最新スタッシュを適用して削除

git stash apply

スタッシュを適用(削除しない)

git stash drop

最新スタッシュを削除

git stash clear

すべてのスタッシュを削除

Gitとは?

Git チートシートは、やりたい作業ごとに Git コマンドを整理したクイックリファレンスです。Git は分散型バージョン管理システムであり、各 clone が履歴を持ち、ブランチは軽量なポインターとして動き、commit はコードベースの変化を時系列で記録します。この一覧は、何をしたいかは分かっているが正確な構文を思い出せないときに役立ちます。たとえば、ステージ済み差分の確認、ブランチ作成、commit の取り消し、作業の stash、リリースタグ、リモート同期などです。ただし、これは参照資料であり、リポジトリ状態の理解の代わりにはなりません。reset --hard、clean -fd、rebase、force push は、未コミット変更、現在のブランチ、共同作業への影響を確認してから使うべきです。

使い方ガイド

早見リファレンス

  1. コマンドカードをクリックするとコマンドをコピーできます
  2. 検索ボックスで目的のコマンドを素早く見つけられます
  3. カテゴリタグをクリックして種類別に絞り込めます
  4. コマンドにカーソルを合わせると詳細な説明が表示されます

機能

シナリオ別に整理基本・ブランチ・リモート・元に戻す・タグ・履歴・スタッシュのカテゴリに分かれており、一覧全体をスクロールせずに目的のコマンドを探せます
検索と絞り込み検索ボックスとカテゴリボタンを組み合わせて素早く結果を絞り込めます。コマンドや説明の一部しか覚えていない場合に最適です
クリックでコピーコマンドカードをクリックしてコピーし、必要に応じてブランチ名やファイルパス、コミットハッシュを置き換えてください
リスク警告元に戻す・リセット・強制プッシュのコマンドは影響範囲を確認してから実行してください。ローカルの変更を誤って削除したり、共有履歴を書き換えたりするリスクがあります

応用テクニック

  • git restore --staged でステージングされたファイルを解除できます
  • git commit --amend で直前のコミットを修正できます
  • git stash で作業の一時保存ができます
  • git revert でプッシュ済みのコミットを元に戻せます

利用シーン

作業中に必要なコマンドカテゴリを素早く見つける基本操作、ブランチ、リモート、元に戻す、タグ、履歴、スタッシュのカテゴリ別にGitコマンドを検索・フィルタリングできるため、長い記事をスクロールしたり、チュートリアルタブを開き直したりせずに正しい構文を確認できます。各カードにはコマンドの横に短い説明が表示されるため、ワークフローは覚えているが正確なフラグ(--force-with-leaseと--forceの違い、git restoreとgit resetの差分など)を思い出せない場合に便利です。
プレースホルダー付きのコマンドをそのままコピーするgit checkout -b <branch>、git push -u origin <branch>、git log --oneline --graph --all、git restore --staged <file>などのコマンドをワンクリックコピーし、ターミナルでプレースホルダーを置き換えて使用します。参照はブラウザ上にあり、コミットデータやブランチ名がどこにも送信されないため、実際のハッシュや内部ブランチプレフィックス、未プッシュの機能名と並行しても安全にコピーできます。
危険なコマンドを使用前にレビューする元に戻すセクションではreset、clean、restore、force push関連のワークフローがまとめられており、破壊的な意図が一目でわかります。git reset --hard HEAD~3やgit push --forceを実行する前に、git statusで現在のブランチを、git rev-parse --abbrev-ref --symbolic-full-name @{u}でリモート追跡状態を確認してください。共有履歴の書き換えはチームメイトが元に戻せないためです。
ブランチ・タグ・スタッシュのスニペットをテンプレートとして保存するgit switch -c feature/x、git tag -a v1.2 -m、git push -mなどのコマンドは、チームのブランチ戦略やリリース規約に沿ってプロジェクト間で繰り返し使います。オンボーディング資料やランブック、pre-commitフック設定に1度コピーしておけば、Gitの仕様変更時(保護ブランチで--forceの代わりに--force-with-leaseが必須になった場合など)に見直すことができます。
履歴コマンドでリポジトリを読んでから書き換えるrebaseやrevertを開く前に、git log --oneline --graph --all、git -L、git diff <branch>...を実行して、誰が何を変更したかを把握しましょう。先に読むのは、失敗した履歴書き換えから回復するよりコストが低いです。特にモノレポでは、機能ブランチをまたいだ不用意なrebaseが進行中のプルリクエストを数十件無効化しかねません。

仕組み

Gitはすべてのプロジェクト状態をコンテンツアドレス型のオブジェクトグラフとして.git/objects内に格納します。アドレスは40文字のSHA-1ハッシュ(Git 2.29の実験的オブジェクトフォーマット以降はSHA-256もオプション)。4つのオブジェクトタイプがあります。blobは生のファイルバイトを保持し、treeは名前とblobおよびサブツリーのマッピングを行い、commitはツリーと親コミットおよび作者メタデータを指し示し、tagは上記のいずれかへの署名付きポインタです。refs/heads/、refs/remotes/、refs/tags/以下のブランチとタグはSHAを含むテキストファイルにすぎず、HEADは現在のブランチを名前で参照するシンボリックリフです。

ローカルの変更は3つの領域を流れます。作業ディレクトリ、インデックス(ステージングエリアとも呼ばれ、.git/indexに格納)、そしてオブジェクトデータベースです。git addはblobハッシュをインデックスに記録し、git commitはインデックスを新しいツリーおよびコミットオブジェクトとしてフリーズし、git checkout/switchはインデックスと作業ツリーをターゲットコミットに更新します。マージは2つのカテゴリに分かれます。fast-forwardはターゲットが直接の子孫である場合に単にブランチポインタを前進させますが、3-wayマージ(recursiveまたはort戦略)は共通の祖先を計算し、2つの親を持つマージコミットを構築します。git rebaseはコミットを新しいベースに1つずつリプレイして履歴を書き換え、新しいSHAを生成します。

リモート同期はHTTPSスマートプロトコル、SSH、または非推奨のgit://プロトコルを介して実行され、デルタ圧縮で生成されたパックファイルを交換します。フェッチ後、Gitはrefs/remotes/origin/*の下にスナップショットを格納し、.git/logs/のreflogはデフォルトで90日間のアンドゥトレイルを保持します(gc.reflogExpire)。そのため、reset --hardやrebaseの失敗でも、ガベージコレクションが到達不能オブジェクトを削除する前に回復可能です。
  • オブジェクトモデル: blob、tree、commit、tag -- SHA-1(または2.29以降はSHA-256)によるコンテンツアドレッシング、.git/objects/xx/にルーズ格納または.git/objects/pack/*.packにパック格納
  • インデックス/ステージング: .git/indexはパス→blobハッシュ+stat情報のバイナリマッピング。git addが更新、git commitがツリーにフリーズ
  • リフとHEAD: refs/heads/<branch>、refs/remotes/<remote>/<branch>、refs/tags/<tag>はSHAを含むプレーンファイル。HEADは現在ブランチへのシンボリックリフ
  • マージ戦略: ターゲットが子孫の場合はfast-forward、それ以外はマージベースを使った3-way recursive/ortマージ。--no-ffでマージコミットを強制
  • リベースの履歴書き換え: git rebaseがコミットを新しいベースにリプレイして新しいSHAを生成。プッシュ済みの共有履歴を壊すため--forceより--force-with-lease推奨
  • リフログからの復元: .git/logs/HEADと個別リフログが90日間のリフ移動を保持(gc.reflogExpire)。git reflogとgit resetで破壊的操作後に復元
  • トランスポート: スマートHTTPS、SSH、またはgit://がupload-pack/receive-packプロトコルでパックファイルをネゴシエート。浅いクローンは--depthで履歴を制限

使用例

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

git checkout -b feature/login  # 新しいブランチを作成して切り替え

作業ディレクトリの変更を取り消し

git restore filename  # ファイルを最後のコミット状態に復元

コミット履歴の表示

git log --oneline --graph --all  # 全ブランチの履歴をグラフィカルに表示

よくある質問

直前のコミットを取り消すにはどうすればよいですか?

git reset --soft HEAD~1 は変更をステージしたままにして再コミットできるようにします。git reset --mixed HEAD~1 は作業ツリーに残しますがアンステージします。git reset --hard HEAD~1 は変更を破棄します。コミットがすでにプッシュされている場合は、代わりに git revert HEAD を使用してください。履歴を書き換えずに変更を取り消す新しいコミットを作成します。

git pull と git fetch の違いは何ですか?

git fetch はリモートからローカル参照にコミットをダウンロードするだけで、作業ブランチには触れません。git pull は git fetch の後に git merge(または --rebase が設定されている場合は git rebase)を実行するのと同等です。アップストリームの変更を統合する前に確認したい場合は fetch を使用してください。

ファイルのローカル変更を破棄するにはどうすればよいですか?

git restore <file> は作業ツリーの未コミット編集を破棄します。git restore --staged <file> は内容を失わずにファイルをアンステージします。git checkout HEAD -- <file> は最新コミットのバージョンに復元します。未追跡ファイルには git clean -f または -fd(ディレクトリも削除)を使用してください。

rebase と merge はどちらを使うべきですか?

プライベートな機能ブランチをマージし戻す前に線形の履歴にしたい場合は rebase を使用します。実際の開発履歴を保持することが重要な共有ブランチを統合するときは merge を使用します。共有ブランチにすでにプッシュされたコミットを rebase することは、全員の合意がない限り絶対にしないでください。SHA を書き換え、他の人のクローンを壊します。

プッシュされる予定の内容を確認するにはどうすればよいですか?

git log @{u}.. はアップストリームにないブランチのコミットを表示します。git diff @{u} は統合された差分を表示します。fetch 後の git status はリモートと比較して、何コミット先行・遅れているかを示します。

削除したブランチや失ったコミットを復元するにはどうすればよいですか?

git reflog は HEAD があったすべての位置を一覧表示します。失ったコミットの SHA を見つけて、git checkout <sha> または git branch <name> <sha> を実行してください。reflog のエントリはガベージコレクション前にデフォルトで約 90 日間保持されるため、ミスの後はすぐに対処してください。

コミットを修正する最も安全な方法は何ですか?

git commit --amend を使用すると、最新コミットのメッセージを編集したり、忘れたファイルを追加したりできます。SHA を書き換えるため、まだプッシュされていないローカルコミットでのみ実行してください。プッシュ済みのコミットを修正する必要がある場合は、--force ではなく --force-with-lease でプッシュして、チームメンバーの更新を上書きしないようにしてください。