「git コマンド 一覧を手元に置いて、必要なときにすぐ確認したい」と思ったことはありませんか。Gitには多くのサブコマンドがありますが、日常業務でよく使うものは20〜30個程度です。
この記事では、初心者がつまずきやすいcommitまでの流れ、branch操作、変更の取り消し・復旧を中心に、主要コマンドとオプションの使い方を早見表付きで解説します。Git 2.23以降に推奨されている git switch と git restore の違い、トラブル時に役立つ git reflog や git cherry-pick、コンフリクトの解決手順まで網羅しているため、逆引き辞典としても活用できます。
Gitコマンド一覧の前に押さえたい仕組みと初期設定
ワークツリー・ステージング・リポジトリの3段階
Gitの変更は、次の3段階を順に移動します。
- ワークツリー:実際にファイルを編集する場所
- ステージングエリア:
git addで「次に記録する変更」を登録する場所 - リポジトリ:
git commitで変更履歴を確定させる場所
さらに、GitHubなどのサーバー上にあるものをリモートリポジトリ、手元のものをローカルリポジトリと呼びます。「今どの段階にあるか」を意識すると、コマンドの役割が理解しやすくなります。

最初に一度だけ行う初期設定
Gitをインストールしたら、まずユーザー名とメールアドレスを設定します。この情報はcommitの作成者として記録されます。
git config --global user.name "Taro Yamada"
git config --global user.email "taro@example.com"
git config -l # 設定内容を確認
エイリアス設定で入力を短縮する
頻繁に打つコマンドは、エイリアス(別名)を登録すると効率が上がります。「git st」で検索して本記事に来た方もいるかもしれませんが、これは git status を短く打てるようにするエイリアスの代表例です。
git config --global alias.st status
git config --global alias.sw switch
設定後は git st と入力するだけで git status が実行されます。
エイリアスを別のPCでも使い回したい場合は、~/.bashrc や ~/.bash_profile にシェル関数として直接書いておく方法もあります。
# ~/.bashrc に追記する例
alias gst='git status'
alias gco='git switch'
【早見表】よく使うGitコマンド一覧
基本操作(作成・記録・確認)
| コマンド | 用途 | よく使うオプション |
|---|---|---|
git init |
新しいリポジトリを作成 | — |
git clone URL |
リモートリポジトリを複製 | -b(ブランチ指定)、--depth 1(最新履歴のみ) |
git status |
変更状態を確認 | -s(簡易表示) |
git add |
変更をステージング | .(カレント以下)、-A(全体)、-p(部分的に選択) |
git commit |
変更を記録 | -m(メッセージ指定)、--amend(直前のcommitを修正) |
git diff |
差分を確認 | --cached(ステージ済みの差分)、<ファイル名>(対象を限定) |
git log |
履歴を確認 | --oneline、--graph、-p |
git show |
特定commitの詳細を表示 | — |
git diff は引数を付けると確認範囲を絞れます。たとえば git diff README.md ならそのファイルだけの差分、git diff <commit-id>..<commit-id> なら2つのcommit間の差分を確認できます。
ファイル・ディレクトリ操作系コマンド
ファイルの削除やリネームも、rm や mv コマンドで直接操作するとGitが変更を検知しづらくなることがあります。代わりに次のGit専用コマンドを使うと、削除・移動とステージングを同時に行えます。
git rm file.txt # ファイルを削除し、ステージングする
git rm --cached file.txt # ファイル自体は残し、Git管理から外す(.gitignore追加前の除外などに便利)
git mv old.txt new.txt # ファイル・ディレクトリの移動・リネームをステージングする
ブランチ・取り消し・リモート操作
| コマンド | 用途 | よく使うオプション |
|---|---|---|
git branch |
branchの一覧・作成・削除 | -d(削除)、-D(強制削除) |
git switch |
branchの切り替え | -c(作成して切り替え) |
git merge |
branchを統合 | — |
git rebase |
履歴を付け替えて統合 | -i(対話的に編集) |
git reset |
commitやステージを取り消し | --soft / --mixed / --hard |
git restore |
ファイルの変更を元に戻す | --staged(ステージ解除) |
git revert |
打ち消しcommitを作成 | — |
git cherry-pick |
特定のcommitだけを取り込む | --continue / --abort |
git stash |
作業を一時退避 | pop、list、-u |
git fetch / git pull |
リモートの変更を取得 | pull --rebase |
git push |
リモートへ送信 | -u、--force-with-lease |
git remote |
リモートの登録・確認 | -v、add、set-url |
git tag |
タグを付ける | -a(注釈付き)、-l(検索) |
branch操作に関するコマンドと使い方
git branch で作成・一覧・削除
git branch # 一覧表示(*が現在のbranch)
git branch feature/login # 新規作成
git branch -d feature/login # マージ済みなら削除
git branch -D feature/login # 未マージでも強制削除
-d はマージされていないbranchの削除を拒否してくれるため、初心者はまず -d を使うのが安全です。
git checkout と git switch / restore の違い
従来の git checkout は「branchの切り替え」と「ファイルの復元」という2つの役割を持ち、混乱の原因になっていました。Git 2.23からはこれが分割されています。
| やりたいこと | 旧コマンド | 新コマンド(推奨) |
|---|---|---|
| branchを切り替える | git checkout main |
git switch main |
| 作成して切り替える | git checkout -b dev |
git switch -c dev |
| ファイルの変更を戻す | git checkout -- a.txt |
git restore a.txt |
今から覚えるなら、目的が明確な switch と restore を使うのがおすすめです。ただし現場のコードやチュートリアルでは今も git checkout が使われていることが多いため、代表的なオプションも押さえておくと安心です。
git checkout のオプション |
意味 |
|---|---|
-b <branch名> |
新しいbranchを作成して切り替える |
-- |
以降をファイルパスとして明示し、branch名との混同を避ける |
-f |
ローカルの変更を破棄して強制的に切り替える |
-p |
変更内容を対話的に選びながら復元する |
mergeとrebaseの違い
git merge と git rebase は、どちらも「別のbranchの変更を取り込む」コマンドです。取り込んだ結果のファイルの中身は同じになりますが、履歴(commitの並び方)の残り方が違います。
たとえば、main から feature branchを作って作業している間に、他の人の変更が main に追加されたとします。
D---E feature(自分の作業)
/
A---B---C main(Cは他の人が追加したcommit)
この状態から main の変更を取り込むとき、mergeとrebaseでは結果が次のように変わります。
git merge:2つの履歴を合流させる
git switch feature
git merge main
D---E---M feature
/ /
A---B-------C main
2つの履歴をそのまま残し、合流点に「マージcommit(M)」を1つ追加します。いつ・どこで分岐して合流したかがすべて記録されるため、既存のcommitは一切書き換わりません。
git rebase:自分のcommitを付け替える
git switch feature
git rebase main
A---B---C---D'---E' feature
↑
main
自分のcommit(D・E)を一度取り外し、main の最新(C)の後ろに付け直します。まるで最初から最新の main から作業を始めたかのような、一直線の履歴になります。ただし付け直したcommitは中身が同じでも別物として作り直されるため、commit IDが変わります(D→D’、E→E’)。

違いを表にまとめると次のとおりです。
| 比較項目 | git merge | git rebase |
|---|---|---|
| 履歴の形 | 分岐と合流が残る | 一直線になる |
| 既存のcommit | そのまま残る | 作り直される(IDが変わる) |
| 追加されるcommit | マージcommitが1つ増える | 増えない |
| コンフリクトの解消 | まとめて1回 | commitごとに発生することがある |
| 他の人と共有中のbranchでの使用 | 安全 | 避ける(強制pushが必要になる) |
迷ったときは、次のように使い分けるのが基本です。
- merge:作業を終えたbranchを
mainに取り込むとき、他の人と共有しているbranchを更新するとき - rebase:まだpushしていない自分だけのbranchを、最新の
mainに追従させるとき
rebaseはcommitを作り直すため、共有済みのbranchをrebaseすると他の人の手元の履歴と食い違ってしまいます。rebaseは自分だけのbranchで使うのが原則です。自分のbranchをpush後にrebaseした場合は、通常の git push が拒否されるため、git push --force-with-lease で送信します。
なお、main に feature を取り込むとき、分岐後に main へ新しいcommitが追加されていなければ、マージcommitは作られず、main の先端が feature の位置まで進むだけで完了します(fast-forward)。
コンフリクトの対処法
同じ箇所を別々に編集していると、merge・rebaseのどちらでもコンフリクト(競合)が発生します。対処手順は次のとおりです。
git statusで競合ファイルを確認する- ファイル内の
<<<<<<<〜>>>>>>>の範囲を手で修正する git add <ファイル名>でステージングする- mergeなら
git commit、rebaseならgit rebase --continueで続きを進める
修正をやめて元の状態に戻したい場合は、次のコマンドで中断できます。
git merge --abort # マージを中断して元の状態に戻す
git rebase --abort # rebaseを中断して元の状態に戻す
リモートリポジトリの管理コマンド
git clone した直後は origin という名前のリモートが1つ登録されていますが、複数人での開発ではリモートを追加・変更する場面もあります。
git remote -v # 登録済みリモートの一覧とURLを確認
git remote add upstream <URL> # 新しいリモートを追加
git remote rename origin old-origin # リモート名を変更
git remote rm old-origin # リモートを削除
git remote set-url origin git@github.com:user/repo.git # URLを変更(HTTPS→SSHなど)
git remote show origin # 追跡branchなどの詳細情報を確認
こうしたリモート操作の細かいオプションは、Git コマンド一覧 – 実際に使うすべてのコマンド | Coddy でも整理されているので、併せて確認すると理解が深まります。
変更の取り消し・復旧コマンド完全ガイド
「間違えてcommitした」「消したつもりのブランチを復元したい」といった場面は実務で頻繁に発生します。ここでは取り消し系コマンドをまとめて整理します。
git reset –soft / –mixed / –hard の違い
git reset は、commit・ステージング・ワークツリーのどこまで巻き戻すかをオプションで指定します。
| オプション | commitの履歴 | ステージングエリア | ワークツリー(ファイルの内容) |
|---|---|---|---|
--soft |
取り消す | 変更済みのまま残る | 変更済みのまま残る |
--mixed(既定) |
取り消す | 未ステージに戻る | 変更済みのまま残る |
--hard |
取り消す | 未ステージに戻る | 変更内容も削除される(要注意) |
git reset --soft HEAD^ # 直前のcommitだけ取り消し、変更はステージ済みのまま次のcommitに使える
git reset --mixed HEAD^ # commitを取り消し、変更はワークツリーに戻す(git addし直せる状態)
git reset --hard HEAD^ # commitも変更内容もすべて消去する(ファイルの変更が失われるので注意)
HEAD^ の代わりに特定のcommit IDを指定すれば、そのcommitまでまとめて戻せます。
git reset --hard <commit-id> # 指定したcommitの状態まで戻す
--hard で戻しすぎてしまった場合は、直前のreset前の状態を指す ORIG_HEAD を使って元に戻せます。
git reset --hard ORIG_HEAD
git revert(公開済みの履歴を安全に取り消す)
reset は履歴そのものを書き換えるため、他の人と共有済みのbranchで使うと不整合が起きます。すでにpush済みのcommitを取り消したいときは、打ち消しcommitを新しく作る git revert を使います。
git revert <commit-id> # 指定commitの変更を打ち消す新しいcommitを作成
git revert --no-commit <commit-id> # まとめて複数commitの打ち消しを1つのcommitにしたい場合
git reflogで消えたコミットを復元する
git reset --hard や誤ったブランチ削除でcommitが「見えなくなった」場合でも、Gitは一定期間ログを保持しているため git reflog で復元できることがあります。
git reflog # HEADの移動履歴を表示し、消えたcommitのハッシュを探す
git reset --hard HEAD@{2} # 2つ前の状態に戻す
# または
git branch recovery <commit-id> # 見つけたcommitから新しいbranchを作って復旧
こうした復旧テクニックは Gitコマンド一覧 #Git – Qiita でも実践的な使用例とともに紹介されています。「消してしまった」と焦ったときは、まず git reflog を試してみてください。
git cherry-pick で特定コミットだけを取り込む
merge や rebase はbranch全体を取り込みますが、「別branchの特定のcommitだけ」を取り込みたい場合は git cherry-pick を使います。たとえば、hotfix branchで作った緊急修正を、まだ完成していない develop branchにも先に反映したいケースなどが典型的な使用例です。
git cherry-pick <commit-id> # 指定したcommitの変更だけを現在のbranchに取り込む
git cherry-pick A..B # 複数commitをまとめて取り込む
git cherry-pick --continue # コンフリクト解消後に続行
git cherry-pick --abort # 取り込みを中断する
タグ操作コマンド一覧
リリースポイントなどの目印を付けるときは git tag を使います。
git tag # タグの一覧を表示
git tag -l "v1.*" # パターンでタグを検索
git tag v1.0.0 # 軽量タグを作成
git tag -a v1.0.0 -m "Release 1.0.0" # メッセージ付きの注釈タグを作成
git push origin v1.0.0 # 作成したタグ1つをリモートへ送信
git push origin --tags # ローカルのすべてのタグをリモートへ送信
git tag -d v1.0.0 # ローカルのタグを削除
注釈付きタグ(-a)は作成者やメッセージが記録されるため、リリースバージョンには軽量タグより注釈付きタグを使うのが一般的です。
(応用)チーム開発で役立つコマンド
git worktree(複数branchの同時作業)
1つのリポジトリから複数の作業ディレクトリを作り、別々のbranchを同時にチェックアウトできます。急な修正対応中に元の作業を止めたくないときに便利です。
git worktree add ../hotfix-dir hotfix/urgent
git worktree list
git worktree remove ../hotfix-dir
git submodule(サブリポジトリの管理)
別のGitリポジトリを、自分のリポジトリの中にサブディレクトリとして取り込む機能です。共通ライブラリを複数プロジェクトで共有する場合などに使われます。
git submodule add <URL> path/to/submodule
git submodule update --init --recursive
git bisect(バグ発生commitの特定)
「いつからこのバグが発生したか分からない」というときに、二分探索でバグの原因commitを特定できます。
git bisect start
git bisect bad # 現在は不具合あり
git bisect good <commit-id> # この時点では正常だった
# Gitが指示するcommitごとに good/bad を答えていくと、原因commitが絞り込まれる
git bisect reset # 作業終了後、元のbranchに戻る
git grep(履歴内の文字列検索)
コミット済みのファイル内から特定の文字列を検索したいときに使います。
git grep "TODO"
worktreeやsubmoduleのような応用コマンドは Gitコマンド一覧 でも整理されているので、チーム開発で本格的に使う前に確認しておくと安心です。
困ったときの逆引きチートシート
「〇〇したい」から該当コマンドを探せる一覧表です。コマンド名を忘れたときは、ここから逆引きしてください。
| やりたいこと | コマンド |
|---|---|
| 直前のcommitメッセージを修正したい | git commit --amend |
| ステージした変更を解除したい | git restore --staged <file> |
| 作業中の変更をなかったことにしたい | git restore <file> |
| 間違えてcommitしたので取り消したい(未push) | git reset --soft HEAD^ |
| 公開済みのcommitを安全に打ち消したい | git revert <commit-id> |
| 消してしまったcommitを復元したい | git reflog → git reset --hard HEAD@{n} |
| 他branchの特定commitだけ取り込みたい | git cherry-pick <commit-id> |
| 作業を一時的に退避したい | git stash |
| マージを中断してやめたい | git merge --abort |
| ファイルを削除・リネームしたい | git rm / git mv |
| リモートURLをSSHに変更したい | git remote set-url origin <URL> |
| バグが入ったcommitを特定したい | git bisect start |
| リリースの目印を付けたい | git tag -a v1.0.0 -m "message" |
よくある質問(FAQ)
git のオプションはどこで確認できる?
各コマンドには --help を付けると詳細なヘルプが表示されます。
git commit --help
man git-commit
また、-C <path>(指定ディレクトリをリポジトリとして扱う)や --version(Gitのバージョン確認)のように、サブコマンドに関わらず使える共通オプションもあります。より詳しいオプション一覧を確認したい場合は、Git コマンドリファレンス(日本語版) のようなリファレンスサイトも参考になります。
git st とは何のコマンド?
git st はGit本体のコマンドではなく、前述のエイリアス設定(git config --global alias.st status)によって git status を短縮したものです。自分の環境で git st が動かない場合は、エイリアスが未設定の可能性があります。
git checkout と git switch はどちらを使うべき?
新しくGitを学ぶ人は git switch(branch切り替え)と git restore(ファイル復元)を使うのがおすすめです。ただし既存のドキュメントやスクリプトでは git checkout も広く使われているため、両方の対応関係を覚えておくと混乱しません。
まとめ
Gitコマンドは種類が多く見えますが、日常的に使うのは「作成・記録・確認」「branch操作」「取り消し・復旧」の3カテゴリに集約されます。まずは早見表に載せた基本コマンドを使いこなし、reflog や cherry-pick、コンフリクト解決といったトラブル対応系のコマンドは「困ったときに見返す」形で覚えていくのがおすすめです。本記事をブックマークしておけば、必要なときにすぐコマンドを逆引きできます。


コメント