Gitコマンド一覧: 毎日使う命令のチートシート
主要なGitコマンドは、リポジトリの作成に git init と git clone、変更の保存に git status、git add、git commit、ブランチの操作に git branch、git switch、git merge、サーバーとの同期に git push、git fetch、git pull、変更の取り消しに git restore、git reset、git revert です。
以下は、実際に使えるGitのチートシートです。コマンドは作業内容ごとに分類し、それぞれに例と短い説明を付けています。ターミナルの横に開いておくと便利です。1日にGitで行う作業のほとんどは、この表の20〜30個のコマンドで足ります。
コマンドの意味を理解するには、3つの領域を意識するとよいでしょう。作業ディレクトリ(ディスク上のファイル)、インデックスまたはステージングエリア(次のコミットに含まれる内容)、リポジトリ(.git フォルダ内のコミット履歴)です。多くのGitコマンドは、これら3つの領域の間、またはローカルとリモートの間で変更を移動させます。
Gitの設定
これらのコマンドは、インストール後に一度だけ実行します。--global フラグは設定を ~/.gitconfig に書き込み、そのユーザーのすべてのリポジトリに適用されます。省略すると、現在のリポジトリにのみ適用されます。
| コマンド | 内容 |
|---|---|
git config --global user.name "Ivan Petrov" | コミットの作成者名 |
git config --global user.email "ivan@example.com" | コミットの作成者メールアドレス |
git config --global init.defaultBranch main | 新しいリポジトリのデフォルトのブランチ名 |
git config --global core.editor "code --wait" | コミットメッセージに使うエディタ(ここではVS Code) |
git config --global pull.rebase false | git pull のデフォルトの動作をマージにする |
git config --global core.autocrlf input | コミット時にCRLFをLFに変換する(macOS/Linux。Windowsでは通常 true) |
git config --list --show-origin | すべての設定と、その取得元ファイルを表示する |
git config --global alias.st status | エイリアス: git status の代わりに git st と入力できる |
git --version | インストールされているGitのバージョン |
git help commit | コマンドの完全なマニュアル(git commit -h は短い一覧) |
リポジトリの作成とクローン
| コマンド | 内容 |
|---|---|
git init | 現在のディレクトリに空のリポジトリ(.git フォルダ)を作成する |
git init my-project | ディレクトリ my-project を作成し、その中にリポジトリを作る |
git clone https://github.com/user/repo.git | リモートのリポジトリを、履歴全体を含めてコピーする |
git clone git@github.com:user/repo.git app | SSHでクローンし、app フォルダに保存する |
git clone --depth 1 URL | 浅いクローン: 最新のコミットのみを取得する。高速で容量も少ない |
git clone -b develop URL | クローンしてすぐにブランチ develop に切り替える |
基本の流れ: status、add、commit
これが毎日の作業の中心です。変更内容を確認し、必要なものをインデックスに入れ、コミットとして記録します。
| コマンド | 内容 |
|---|---|
git status | 状態を表示する: 変更されたファイル、ステージ済みのファイル、追跡されていないファイル |
git status -s | 短い形式: M は変更あり、A は追加済み、?? は未追跡 |
git add file.txt | ファイルをインデックスに追加する |
git add . | 現在のディレクトリ以下のすべての変更(削除を含む)を追加する |
git add -A | リポジトリ全体のすべての変更を追加する |
git add -p | 変更の部分(hunk)を対話的に選んで追加する |
git commit -m "ログインフォームを追加" | インデックスの内容からメッセージ付きのコミットを作成する |
git commit -am "誤字を修正" | 追跡中の変更されたファイルをすべてステージしてコミットする。新しいファイルは含まれない |
git commit --amend | 直前のコミットを書き直す: 入れ忘れたものを追加する、またはメッセージを修正する |
git commit --amend --no-edit | メッセージを変えずに直前のコミットを補う |
git rm file.txt | ディスクとインデックスの両方からファイルを削除する |
git rm --cached secret.env | ディスク上には残したまま、追跡を解除する |
git mv old.js new.js | ファイルの名前を変更する、または移動する |
典型的な作業の流れは次のとおりです。
git status
git add src/login.js src/login.css
git diff --staged # コミットに含まれる内容を確認する
git commit -m "ログインフォームを追加"
すでに共有ブランチにプッシュされたコミットには --amend を使わないでください。ハッシュの異なる新しいコミットが作られ、チームメンバーの履歴と食い違いが生じます。
履歴と変更内容の確認
| コマンド | 内容 |
|---|---|
git log | 現在のブランチのコミット履歴 |
git log --oneline | 各コミットを1行で表示する: 短縮ハッシュとタイトル |
git log --oneline --graph --all | すべてのブランチのグラフをターミナルに表示する |
git log -p file.txt | ファイルの履歴を、各コミットの差分付きで表示する |
git log --author="Ivan" --since="2 weeks ago" | 作成者と日付で絞り込む |
git log -S "getUser" | 文字列 getUser が追加または削除されたコミットを探す |
git log main..feature | feature にあって main にないコミット |
git diff | 作業ディレクトリの変更のうち、まだインデックスに追加していないもの |
git diff --staged | 直前のコミットに対するインデックスの変更(--cached と同じ) |
git diff main feature | 2つのブランチの先端の差分 |
git diff HEAD~3 -- src/ | 直近3コミットのうち、src フォルダ内の変更 |
git show a1b2c3d | 特定のコミットのメタデータと差分 |
git show HEAD:README.md | 最新のコミット時点のファイルの内容 |
git blame app.js | 各行を最後に変更したユーザーとコミット |
git shortlog -sn | 作成者ごとのコミット数 |
コミットを指定する記法は、どの場面でも役立ちます。HEAD は現在のコミット、HEAD~1 はその親、HEAD~3 は最初の親を3つさかのぼったコミット、HEAD^2 はマージコミットの2番目の親です。
ブランチ: 作成、切り替え、削除
Git 2.23以降では、ブランチ操作に git switch、ファイルの復元に git restore を使えます。これらは、多機能だった git checkout を分けたものです。従来の形式も引き続き動作します。
| コマンド | 内容 |
|---|---|
git branch | ローカルブランチの一覧。現在のブランチには * が付く |
git branch -a | ローカルブランチとリモートブランチ(リモート追跡ブランチ)の一覧 |
git branch -vv | 各ブランチの最新コミットと、upstreamに対する遅れ・進みを表示する |
git branch feature/login | 切り替えずにブランチを作成する |
git switch feature/login | ブランチに切り替える |
git switch -c feature/login | ブランチを作成して切り替える(git checkout -b と同じ) |
git switch - | 直前のブランチに戻る |
git branch -m new-name | 現在のブランチの名前を変更する |
git branch -d feature/login | マージ済みのブランチを削除する |
git branch -D feature/login | マージされていなくても強制的に削除する |
git branch --merged | 現在のブランチにマージ済みのブランチ(削除の候補) |
マージとリベース
| コマンド | 内容 |
|---|---|
git merge feature | feature を現在のブランチに統合する(可能な場合は早送り) |
git merge --no-ff feature | 常にマージコミットを作成する |
git merge --squash feature | ブランチのすべての変更を1つにまとめてインデックスに入れる。その後 git commit |
git merge --abort | コンフリクトのあるマージを中止し、元の状態に戻す |
git rebase main | 現在のブランチのコミットを main の上に付け替える |
git rebase -i HEAD~4 | 対話的に、直近4コミットを統合(squash)、名前変更、並べ替え、削除する |
git rebase --continue | コンフリクトを解決した後に続行する |
git rebase --abort | リベースを完全に取り消す |
git cherry-pick a1b2c3d | 1つのコミットを現在のブランチに新しいコミットとして適用する |
マージのコンフリクトは、ほとんどの場合次の手順で解決します。
git merge feature
# CONFLICT (content): Merge conflict in app.js
git status # ファイルは "both modified" の欄に表示される
# app.js を編集し、<<<<<<< ======= >>>>>>> のマーカーを削除する
git add app.js
git commit # Gitがマージコミットのメッセージを自動で用意する
リベースの基本ルール: 共有ブランチにすでにあり、ほかの人が作業の土台にしているコミットはリベースしないでください。
リモートリポジトリの操作
| コマンド | 内容 |
|---|---|
git remote -v | リモートの一覧とそのアドレス |
git remote add origin git@github.com:user/repo.git | リモートリポジトリを origin という名前で登録する |
git remote set-url origin NEW_URL | リモートのアドレスを変更する(例: HTTPSからSSHへ) |
git remote remove upstream | リモートの登録を削除する |
git fetch | 新しいコミットとブランチをダウンロードする。ローカルのファイルは変更しない |
git fetch --prune | 上記に加え、サーバーで削除されたブランチへの参照を削除する |
git pull | git fetch に加え、upstreamブランチを現在のブランチにマージする |
git pull --rebase | git fetch に加え、自分のコミットを取得した内容の上にリベースする |
git push | 現在のブランチのコミットをupstreamに送信する |
git push -u origin feature/login | upstreamを設定しながら、ブランチを初めて送信する |
git push --force-with-lease | リモートのブランチを上書きする。ただし、他の人の新しいコミットがない場合に限る |
git push origin --delete feature/login | サーバー上のブランチを削除する |
git push --tags | ローカルのタグをすべて送信する |
git push --force の代わりに --force-with-lease を使う習慣をつけましょう。同じブランチに誰かがプッシュしていた場合、そのコマンドは他の人の作業を上書きすることを拒否します。
変更の取り消し
Gitで最も慎重になるべき部分です。コマンドを選ぶ前に、変更がファイルにだけあるのか、インデックスにあるのか、ローカルのコミットにあるのか、すでに公開されたコミットにあるのかを確認してください。
| 状況 | コマンド |
|---|---|
| ファイルの変更を取り消す(最新のコミットの状態に戻す) | git restore app.js |
| 変更を残したまま、ファイルをインデックスから外す | git restore --staged app.js |
| 特定のコミットの時点のファイルを復元する | git restore --source=a1b2c3d app.js |
| 直前のコミットを取り消し、変更をインデックスに残す | git reset --soft HEAD~1 |
| 直前のコミットを取り消し、変更をファイルに残す | git reset HEAD~1(デフォルトは --mixed モード) |
| 直前のコミットとその変更をすべて削除する | git reset --hard HEAD~1 |
| 公開済みのコミットを、逆の操作を行う新しいコミットで取り消す | git revert a1b2c3d |
| マージコミットを取り消す | git revert -m 1 <merge-hash> |
| 削除される追跡外のファイルを確認する | git clean -n |
| 追跡外のファイルとフォルダを削除する | git clean -fd |
reset やリベースの後で「失われた」コミットを見つける | git reflog、次に git reset --hard HEAD@{2} |
git reset --hard と git clean -f は、コミットされていない変更を完全に削除します。reflogに残るのはコミットだけで、作業ディレクトリの変更は残りません。実行前には git stash または少なくとも git status を確認してください。
stash: 途中の作業を一時退避する
| コマンド | 内容 |
|---|---|
git stash | 追跡中のファイルの変更を退避し、作業ディレクトリをきれいにする |
git stash push -u -m "wip: フォーム" | 追跡外のファイルも含めて、名前を付けて退避する |
git stash list | 退避の一覧: stash@{0}、stash@{1} … |
git stash show -p stash@{0} | 退避した内容の差分を表示する |
git stash pop | 最新の退避を戻し、一覧から削除する |
git stash apply stash@{1} | 退避を戻すが、一覧には残す |
git stash drop stash@{1} | 1つの退避を削除する |
git stash branch fix-form | 退避時のコミットからブランチを作成し、退避を適用する |
タグとリリース
| コマンド | 内容 |
|---|---|
git tag | タグの一覧 |
git tag -a v1.2.0 -m "リリース 1.2.0" | 作成者、日時、メッセージを含む注釈付きタグ |
git tag v1.2.0 a1b2c3d | 特定のコミットに付ける軽量タグ |
git push origin v1.2.0 | 1つのタグを送信する |
git tag -d v1.2.0 | ローカルのタグを削除する |
git push origin --delete v1.2.0 | サーバー上のタグを削除する |
git describe --tags | 最も近いタグと、その後のコミット数(例: v1.2.0-3-ga1b2c3d) |
応用的なGitコマンド
| コマンド | 内容 |
|---|---|
git bisect start、git bisect bad、git bisect good v1.1.0 | 不具合を入れたコミットを二分探索で見つける。終了時は git bisect reset |
git worktree add ../hotfix main | 同じリポジトリの別ブランチを使う、2つ目の作業ディレクトリを作る |
git submodule update --init --recursive | クローン後にサブモジュールを取得する |
git grep "TODO" | 追跡中のファイルを高速に検索する |
git format-patch -1 HEAD / git apply fix.patch | コミットをパッチに保存し、そのパッチを作業ディレクトリに適用する |
git gc | オブジェクトをまとめ、リポジトリを整理する(通常はGitが自動で行う) |
よくあるミスと対処法
新しいブランチではなく main にコミットしてしまった
まだプッシュしていないコミットであれば、現在のコミットを指すブランチを作り、main を1つ戻します。
git branch feature/login # ブランチが自分のコミットを指すようにする
git reset --hard HEAD~1 # main を1つ前に戻す
git switch feature/login
直前のコミットに入れ忘れたファイルがある
git add forgotten.js
git commit --amend --no-edit
push が rejected(non-fast-forward)で拒否された
サーバーには、あなたのローカルにないコミットがあります。先に取り込んでから送信してください。
git pull --rebase
git push
パスワードの入ったファイルを誤ってコミットした
追跡から外し、.gitignore に追加します: git rm --cached .env の後にコミットします。そのコミットがすでに公開されていれば、秘密情報は漏えいしたものとみなし、再発行してください。履歴から消えたわけではありません。
まとめ
日常の作業には、status、add、commit、switch、merge、pull、push、log --oneline の基本セットで十分です。取り消しには、restore、reset、revert を使い分けます。コミットが公開済みかどうかで選んでください。reflog は最後の手段として覚えておくと安心です。このチートシートのGitコマンドはすべて、Gitのコースで実際に自分のリポジトリを使って試すことができます。
よくある質問
Gitの初心者は、いくつのコマンドを覚えればよいですか?
最初は10〜12個で十分です。init、clone、status、add、commit、log、diff、branch、switch、merge、pull、push です。ほかのコマンドは、必要になったときに覚えれば問題ありません。
git switch と git checkout の違いは何ですか?
git switch はブランチの切り替えと作成だけを行い、git checkout はファイルの復元も行います。ブランチとファイルを取り違えて変更を失わないように、switch と restore に分けられました。
どのGitコマンドの使い方も、ヘルプで確認できますか?
はい。git help コマンド名 で完全なマニュアル、git コマンド名 -h で主なオプションの短い一覧を表示できます。同じドキュメントは git-scm.com でも読めます。
長いGitコマンドを短くする方法はありますか?
エイリアスを使えます。git config --global alias.lg "log --oneline --graph --all" と設定すると、git lg と入力するだけで済みます。
これらのコマンドはWindowsでも使えますか?
はい。コマンドはどのOSでも同じです。Windowsでは Git Bash、PowerShell、またはエディタのターミナルで実行できます。
このテーマはコース「Git:初心者から自信を持って使える開発者へ」で実践とともに詳しく解説しています。
- 最初のリポジトリ: init、add、commit、そしてインデックスの魔法
- Git履歴の読み方: log, diff, showと過去の履歴を辿る
- ブランチ: コードの並行現実
- ミスをなかったことに:restore、reset、revert ─ 正しい使い方と危険な落とし穴
- GitHubとリモートリポジトリ: クラウドでのコード管理
- 上級者向けツール:rebase、stash、cherry-pick、タグ