Gitコマンドとは、ファイルの変更履歴を記録・共有するバージョン管理ツール「Git」を操作するための命令です。毎日使うのは status・add・commit・switch・pull・push の6つ程度ですが、取り消しや調査の場面では restore・revert・reflog・bisect などを知っていると、落ち着いて対処できます。

この記事は、Gitコマンドの全体を見渡す入口です。「やりたいこと」から引ける早見表を最初に置き、各コマンドは要点と、Git 2.43.0(Ubuntu 24.04標準)で実際に実行した出力を短く載せました。取り消しコマンドの選び方を判断フローで示し、よく出るエラーメッセージの実物と対処も一覧にしています。

Gitコマンドの早見表(やりたいこと別)

やりたいこと コマンド ひとこと
名前とメールを設定 git config --global user.name "名前" 最初に1回。emailも同様
新しくリポジトリを作る git init 今のフォルダを管理対象に
リモートを複製する git clone <URL> フォルダごと取得
状態を見る git status / git status -s -s は1行ずつの短縮表示
変更をステージする git add <ファイル> / git add . コミットに含める印を付ける
コミットする git commit -m "メッセージ" ステージした内容を記録
直前のコミットを直す git commit --amend push前に使う
履歴を見る git log --oneline --graph --all 1行・分岐つき
1つのコミットの中身 git show <コミット> --stat でファイル一覧
差分を見る git diff / git diff --staged 未ステージ/ステージ済み
ブランチ一覧 git branch -vv 追跡先と最新コミットつき
ブランチを作って移動 git switch -c <名前> checkout -b と同じ
ブランチを移動 git switch <名前> - で直前のブランチへ
ブランチを取り込む git merge <名前> 詳しくは merge/rebase の解説で
履歴を付け替える git rebase <ブランチ> / git rebase -i HEAD~3 push前の整理に
特定コミットだけ取り込む git cherry-pick <コミット> 別ブランチの修正を1つ持ってくる
ブランチを削除 git branch -d <名前> 未マージなら止まる。強制は -D
リモートを確認・追加 git remote -v / git remote add origin <URL>
送信する git push -u origin <ブランチ> 初回は -u で追跡設定
取得だけする git fetch 作業ツリーは変わらない
取得して統合 git pull / git pull --rebase fetch+merge(またはrebase)
ファイルの変更を捨てる git restore <ファイル> 作業ツリーを戻す
ステージを外す git restore --staged <ファイル> 変更は残る
コミットを打ち消す git revert <コミット> push後はこれ
コミットを取り消す git reset --soft / git reset / git reset --hard push前向け。違いは後述
一時退避 git stash push -m "メモ" / git stash pop
追跡外ファイルを消す git clean -n → git clean -f -n で確認してから
タグを付ける git tag -a v1.0.0 -m "説明" git push origin v1.0.0 で送信
行ごとの最終変更者 git blame <ファイル>
不具合の混入コミットを探す git bisect start / git bisect run <テスト> 二分探索
HEADの移動履歴 git reflog 消えたコミットの復元に
文字列を含むコミットを探す git log -S "文字列"
別フォルダで別ブランチ git worktree add <パス> -b <名前> 同時に2ブランチを開く

本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。

(記載例)出典:株式会社RJC「Gitコマンド一覧|やりたいこと別の早見表と実行結果・エラー対処」

検証環境

項目 内容
Git 2.43.0(Ubuntu 24.04.4 LTSの標準パッケージ)
最新版 公式サイト(git-scm.com)では 2.56.0(2026-09-28)。この記事のコマンドはどちらでも同じように使えます
リモート ローカルに作ったベアリポジトリ(../remote.git)で push/pull を実行

出力中のハッシュや日時は、手元で実行すると異なります。

初期設定

git config --global user.name "Taro Yamada"
git config --global user.email taro@example.com
git config --global init.defaultBranch main   # 新規リポジトリの既定ブランチ名
git config --global --list
user.name=Taro Yamada
user.email=taro@example.com
init.defaultbranch=main
よく使う設定 コマンド 効果
pullの統合方法 git config --global pull.rebase false pull時にマージする(true ならrebase)
エディタ git config --global core.editor "code --wait" コミットメッセージをVS Codeで書く
改行コード(Windows) git config --global core.autocrlf true チェックアウト時にCRLFへ変換
別名 git config --global alias.lg "log --oneline --graph --all" git lg で呼べる
設定の場所確認 git config --list --show-origin どのファイルの設定かわかる

--global はユーザー全体、付けないとそのリポジトリだけに効きます。仕事用と個人用でメールを分けたいときは、リポジトリ内で --global なしで設定します。

リポジトリの作成・複製

$ git init myapp
Initialized empty Git repository in /…/myapp/.git/

$ git clone ../remote.git ../clone-test
Cloning into '../clone-test'...
done.
コマンド よく使うオプション
git init git init <フォルダ名> でフォルダ作成から
git clone <URL> --depth 1(最新だけ取得)、-b <ブランチ>(ブランチ指定)、<URL> <フォルダ名>

状態の確認

$ git status
On branch main

No commits yet

Untracked files:
  (use "git add <file>..." to include in what will be committed)
    README.md
    app.py

nothing added to commit but untracked files present (use "git add" to track)

$ git status -s
?? README.md
?? app.py

-s の2文字は「左=ステージ、右=作業ツリー」です。

表示 意味
?? 追跡されていない新規ファイル
A 新規ファイルをステージ済み
M 変更あり(未ステージ)
M 変更をステージ済み
D 削除をステージ済み
UU コンフリクト中

ステージとコミット

$ git add .

$ git commit -m "feat: 初期ファイルを追加"
[main (root-commit) 4763e39] feat: 初期ファイルを追加
 2 files changed, 2 insertions(+)
 create mode 100644 README.md
 create mode 100644 app.py
コマンド よく使うオプション
git add .(すべて)、-p(変更のかたまりごとに選ぶ)、-u(追跡済みの変更だけ)
git commit -m(メッセージ)、-a(追跡済みを自動ステージ)、--amend(直前を修正)

ステージ(インデックス)とは、次のコミットに含める変更を置いておく場所です。add -p を使うと、1つのファイルの中の一部だけをコミットできます。メッセージの書き方は、コミットメッセージの解説記事で詳しく扱っています。

履歴と差分を見る

$ git log --oneline
e631c12 feat: 在庫表示を追加
4763e39 feat: 初期ファイルを追加

$ git show --stat HEAD
commit e631c1290b46283e9b1be2b201ecb46a4d388418
Author: Taro Yamada <taro@example.com>
Date:   Tue Sep 29 15:07:32 2026 +0900

    feat: 在庫表示を追加

 app.py | 1 +
 1 file changed, 1 insertion(+)
$ git diff
diff --git a/app.py b/app.py
index 11b15b1..fdc704d 100644
--- a/app.py
+++ b/app.py
@@ -1 +1,2 @@
 print("hello")
+print("stock")
やりたいこと コマンド 実行結果の例
分岐を含めて1行で git log --oneline --graph --all * e631c12 feat: 在庫表示を追加
件数を絞る git log --oneline -3 最新3件
作者で絞る git log --author=Taro
文字列の増減で探す git log -S "stock" --oneline e631c12 feat: 在庫表示を追加
ファイルの履歴 git log -p -- app.py 差分つき
作者ごとのコミット数 git shortlog -sn HEAD 3 Taro Yamada
ステージ済みの差分 git diff --staged コミット直前の確認
コミット間の差分(要約) git diff --stat HEAD~2 HEAD app.py | 1 + ほか
ブランチ間の差分 git diff main..feature/search
追跡中ファイルを検索 git grep -n print app.py:1:print("hello")

HEAD は今いるコミット、HEAD~1 はその1つ前を指します。

ブランチ

$ git switch -c feature/search
Switched to a new branch 'feature/search'

$ git branch -vv
* feature/search db93702 feat: 検索を追加
  main           e631c12 feat: 在庫表示を追加

$ git switch main
Switched to branch 'main'

$ git merge --no-edit feature/search
Updating e631c12..db93702
Fast-forward
 search.py | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 search.py

$ git branch -d feature/search
Deleted branch feature/search (was db93702).
コマンド よく使うオプション
git branch -vv(詳細)、-a(リモート含む)、-m <新名>(名前変更)、-d/-D(削除)
git switch -c(作成して移動)、-(直前のブランチ)、--detach <コミット>
git merge --no-ff(必ずマージコミット)、--abort(中止)
git rebase -i(対話的に整理)、--continue / --abort
git cherry-pick -x(元コミットを記録)、A..B(範囲)

rebase -i で「wip」コミットを1つにまとめる

git rebase -i HEAD~3 を実行すると、エディタに pick の一覧が開きます。2行目以降を fixup(メッセージを捨てて前にまとめる)に書き換えて保存すると、1つにまとまります。

(エディタで編集する内容)
pick 3e2b317 wip 1
fixup 30fc27b wip 2
fixup 4f02e86 wip 3
$ git log --oneline -4          # 実行前
4f02e86 wip 3
30fc27b wip 2
3e2b317 wip 1
db93702 feat: 検索を追加

$ git log --oneline -3          # 実行後
f9af0da wip 1
db93702 feat: 検索を追加
e631c12 feat: 在庫表示を追加
指示 意味
pick そのまま使う
reword メッセージだけ変える
squash 前のコミットにまとめ、メッセージも結合
fixup 前のコミットにまとめ、メッセージは捨てる
drop コミットを消す

rebaseは履歴を書き換えるため、まだpushしていないコミットに使うのが基本です。mergeとの使い分け、コンフリクトの直し方、cherry-pickの詳細はそれぞれの解説記事で扱っています。

switch・restore と checkout の対応表

git checkout は「ブランチ移動」と「ファイルを戻す」の2つの役割を持っていたため、Git 2.23で役割ごとに switch(ブランチ)と restore(ファイル) が追加されました。手元の2.43.0のマニュアルには「実験的」と書かれていますが、公式サイトの最新ドキュメント(2.55.0更新)ではその記載はなくなっています。

やりたいこと checkout(従来) switch / restore(新)
ブランチを移動 git checkout main git switch main
作成して移動 git checkout -b topic git switch -c topic
直前のブランチへ git checkout - git switch -
リモートのブランチを手元に git checkout -b topic origin/topic git switch topic(同名が1つなら自動で追跡)
コミットを見に行く git checkout <ハッシュ> git switch --detach <ハッシュ>
ファイルの変更を捨てる git checkout -- app.py git restore app.py
ステージを外す git reset HEAD app.py git restore --staged app.py
別コミットの版を取り出す git checkout <ハッシュ> -- app.py git restore --source=<ハッシュ> app.py

新しく覚えるなら switch / restore が、名前と役割が一致していて迷いにくいです。checkoutも引き続き使えます。

リモート

$ git remote add origin ../remote.git

$ git remote -v
origin  ../remote.git (fetch)
origin  ../remote.git (push)

$ git push -u origin main
To ../remote.git
 * [new branch]      main -> main
branch 'main' set up to track 'origin/main'.

$ git branch -vv
* main db93702 [origin/main] feat: 検索を追加

$ git pull
Already up to date.
コマンド よく使うオプション
git fetch --prune(消えたリモートブランチを整理)、--all
git pull --rebase、--ff-only(早送りできるときだけ)
git push -u(追跡設定)、--force-with-lease(安全な強制push)、--tags
git remote -v、add、set-url origin <URL>、remove

fetchは「取ってくるだけ」、pullは「取ってきて統合する」です。強制pushが必要なときは、他の人の変更を上書きしないよう確認してくれる --force-with-lease を使います。

取り消し:どのコマンドを使うか

flowchart TD
    A[何を取り消したい?] --> B{コミット済み?}
    B -->|いいえ| C{ステージ済み?}
    C -->|はい| D[git restore --staged ファイル<br>ステージだけ外す]
    C -->|いいえ| E[git restore ファイル<br>変更を捨てる]
    B -->|はい| F{pushした?}
    F -->|はい| G[git revert コミット<br>打ち消しコミットを追加]
    F -->|いいえ| H{直前のコミットを<br>少し直すだけ?}
    H -->|はい| I[git commit --amend]
    H -->|いいえ| J{変更は残す?}
    J -->|ステージに残す| K[git reset --soft HEAD~1]
    J -->|作業ツリーに残す| L[git reset HEAD~1]
    J -->|捨てる| M[git reset --hard HEAD~1<br>reflogで戻せる]
コマンド 履歴 ステージ 作業ツリー 使う場面
git restore <f> 変えない 変えない 戻す 編集を捨てる
git restore --staged <f> 変えない 戻す 残す addを取り消す
git commit --amend 直前を置き換え ― ― メッセージ修正・入れ忘れ
git reset --soft HEAD~1 1つ戻す 残す 残す コミットだけやり直す
git reset HEAD~1(--mixed) 1つ戻す 戻す 残す ステージからやり直す
git reset --hard HEAD~1 1つ戻す 戻す 戻す すべて捨てる
git revert <c> 打ち消しを追加 ― ― push済みを取り消す

実行結果です。

$ git commit --amend -m "docs: メモを追加"
[main d305b4a] docs: メモを追加
 Date: Tue Sep 29 15:07:32 2026 +0900
 1 file changed, 1 insertion(+)
 create mode 100644 note.txt

$ git revert --no-edit HEAD
[main e01f6e4] Revert "docs: メモを追加"
 Date: Tue Sep 29 15:07:32 2026 +0900
 1 file changed, 1 deletion(-)
 delete mode 100644 note.txt

$ git reset --soft HEAD~1
$ git status -s
D  note.txt

push済みのコミットは revert、push前なら reset や amend が基本の分け方です。状況別の詳しい手順や reset --hard からの復元は、それぞれの解説記事で扱っています。

一時退避とお掃除

$ git stash push -m "作業中"
Saved working directory and index state On main: 作業中

$ git stash list
stash@{0}: On main: 作業中

$ git clean -n
Would remove tmp.log

$ git clean -f
Removing tmp.log
コマンド よく使うオプション
git stash push -m、-u(未追跡も)、pop、apply、list、drop
git clean -n(確認だけ)、-f(実行)、-d(フォルダも)、-x(無視ファイルも)

git clean は追跡されていないファイルを削除するため、必ず -n で一覧を見てから -f を実行します。

タグ

$ git tag -a v1.0.0 -m "最初のリリース"
$ git tag
v1.0.0

$ git push origin v1.0.0
To ../remote.git
 * [new tag]         v1.0.0 -> v1.0.0
やりたいこと コマンド
注釈つきタグ(推奨) git tag -a v1.0.0 -m "説明"
過去のコミットに付ける git tag -a v0.9.0 <ハッシュ> -m "説明"
一覧(絞り込み) git tag -l "v1.*"
すべて送信 git push origin --tags
削除(手元/リモート) git tag -d v1.0.0 / git push origin --delete v1.0.0

調査:blame・bisect・reflog

blame:その行を最後に変えたコミット

$ git blame app.py
^4763e39 (Taro Yamada 2026-09-29 15:07:32 +0900 1) print("hello")
e631c129 (Taro Yamada 2026-09-29 15:07:32 +0900 2) print("stock")

-L 10,20 で行範囲を絞れます。^ つきは最初のコミットです。

bisect:不具合が入ったコミットを二分探索で探す

ver.txt に BUG という文字が入ったコミットを探す例です。git bisect run にテストコマンドを渡すと、成功(終了コード0)を「良い」、失敗を「悪い」と判定して自動で探します。

$ git bisect start HEAD HEAD~6        # 悪いコミット 良いコミット の順
Bisecting: 2 revisions left to test after this (roughly 2 steps)
[cfa6ad3cd6730d8bee81976e663df4b8c430a338] chore: ver 3

$ git bisect run sh -c '! grep -q BUG ver.txt'
…(途中省略)
f52cc9c1a671eb70ec64ee9ac8c0e946aa5bcdde is the first bad commit
commit f52cc9c1a671eb70ec64ee9ac8c0e946aa5bcdde
Author: Taro Yamada <taro@example.com>
Date:   Tue Sep 29 15:07:49 2026 +0900

    chore: ver 4
bisect found first bad commit

$ git bisect reset                    # 元のブランチに戻る

6コミットを3回のテストで絞り込めました。手動で行うときは git bisect good / git bisect bad を繰り返します。

reflog:HEADが動いた記録

$ git reflog -5
db93702 HEAD@{0}: reset: moving to HEAD~1
d305b4a HEAD@{1}: reset: moving to HEAD~1
e01f6e4 HEAD@{2}: revert: Revert "docs: メモを追加"
d305b4a HEAD@{3}: commit (amend): docs: メモを追加
6e464c1 HEAD@{4}: commit: docs: メモ

resetやamendで見えなくなったコミットも、reflogにハッシュが残っていれば git reset --hard HEAD@{2} などで戻せます。

worktree:2つのブランチを同時に開く

$ git worktree add ../myapp-hotfix -b hotfix
Preparing worktree (new branch 'hotfix')
HEAD is now at db93702 feat: 検索を追加

$ git worktree list
/…/myapp         db93702 [main]
/…/myapp-hotfix  db93702 [hotfix]

$ git worktree remove ../myapp-hotfix

worktreeは、1つのリポジトリから別フォルダに別ブランチを展開する機能です。作業中のブランチをそのままに、急ぎの修正を別フォルダで進められます。AIエージェントを複数並行で動かすときの作業場所の分け方としても使われています。

よくあるエラーメッセージと対処

いずれも Git 2.43.0 で実際に表示されたメッセージです。

エラーメッセージ(抜粋) 原因 対処
fatal: not a git repository (or any of the parent directories): .git Git管理外のフォルダで実行 cd で正しいフォルダへ。新規なら git init
*** Please tell me who you are. 名前・メール未設定 git config --global user.name / user.email
fatal: pathspec 'nosuch.txt' did not match any files ファイル名の間違い git status で名前を確認
error: Your local changes to the following files would be overwritten by checkout 未コミットの変更がブランチ移動とぶつかる git stash で退避するか、コミットしてから移動
error: the branch 'topic' is not fully merged. 未マージのブランチを -d で削除 必要なら先にマージ。不要なら git branch -D topic
CONFLICT (content): Merge conflict in app.py 同じ箇所を両方で変更 ファイルを直して git add → git commit。やめるなら git merge --abort
! [rejected] main -> main (fetch first) リモートに手元にない変更がある git pull(または pull --rebase)してから push
fatal: Need to specify how to reconcile divergent branches. pullの統合方法が未設定で、履歴が分岐 git pull --rebase / --no-rebase を指定、または git config pull.rebase false
error: src refspec nosuch does not match any そのブランチが手元にない(コミットが0件の場合も) git branch で名前を確認、1件以上コミット
You are in 'detached HEAD' state. ブランチではなくコミットを直接開いた 戻るなら git switch -、残すなら git switch -c <新ブランチ>

push拒否とpullの分岐は、実際には次のように表示されます。

$ git push origin main
To ../remote.git
 ! [rejected]        main -> main (fetch first)
error: failed to push some refs to '../remote.git'
hint: Updates were rejected because the remote contains work that you do not
hint: have locally. …

$ git pull
hint: You have divergent branches and need to specify how to reconcile them.
hint:   git config pull.rebase false  # merge
hint:   git config pull.rebase true   # rebase
hint:   git config pull.ff only       # fast-forward only
fatal: Need to specify how to reconcile divergent branches.

$ git pull --rebase
Successfully rebased and updated refs/heads/main.

hintの行に、次に打つべきコマンドがそのまま書かれていることが多いので、エラー時はまずhintを読むのが近道です。

よくある質問

Q. 最初に覚えるべきGitコマンドはどれですか? A. status・add・commit・log・switch・pull・push の7つで日々の作業の大半をこなせます。次に、取り消しの restore・revert、退避の stash を覚えると安心です。

Q. git pull と git fetch はどちらを使えばよいですか? A. リモートの変更を確認してから取り込みたいときは fetch → git log main..origin/main で中身を見てから merge します。いつも取り込むだけなら pull で十分です。

Q. checkoutはもう使わないほうがよいですか? A. 使っても問題ありません。switch/restoreは役割ごとに名前が分かれていて、操作ミスを減らしやすいのが利点です。チームの手順書と合わせて選ぶとよいでしょう。

Q. コマンドのヘルプはどう見ますか? A. git <コマンド> -h で短い使い方、git help <コマンド> で詳しいマニュアルが開きます。オプションをすぐ確認したいときは -h が便利です。

まとめ

  • 毎日使うのは status・add・commit・switch・pull・push。早見表から「やりたいこと」で引く
  • ブランチは switch、ファイルの取り消しは restore と覚えると、checkoutより迷いにくい
  • 取り消しは push前なら reset/amend、push後なら revert
  • reflog があれば、resetで見えなくなったコミットにも戻れる
  • bisect run で、不具合が入ったコミットを自動で絞り込める
  • worktree で2つのブランチを別フォルダで同時に開ける
  • エラー時は hintの行に次の手順が書かれていることが多い

本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。

(記載例)出典:株式会社RJC「Gitコマンド一覧|やりたいこと別の早見表と実行結果・エラー対処」

株式会社RJCでは、Gitの基本操作から取り消しや調査のコマンドまで、プロジェクトの中で仲間と教え合いながら使いこなしています。こうした知識を共有しながら、日々技術を磨いています。

株式会社RJC ― SI事業・SES事業・AI駆動開発。RJCは一緒に成長を楽しめる会社です。

WE ARE HIRING

RJCで一緒に開発しながら、
成長を楽しみませんか?

RJCは、Web・モバイル・AIを活用した開発プロジェクトで、テックリードやPM・PMOも活躍するシステム開発会社です。会社を知る、待遇を確かめる、話を聞いてみる。気になるところ見てみてください!

  • 127日年間休日
  • 12時間平均残業時間
  • 毎日ガチャ遊びココロも大切にする福利厚生。アマギフなどの賞品ラインナップ!

ほかにも、チケットレストラン、書籍読み放題、2年ごとの慰労報奨(休暇 or 金一封)、11期連続の黒字決算。

ABOUT RJC RJCがどんな会社か知る 考え方、研修、働き方、福利厚生、社員の前職まで。RJCのことが丸わかり! RJC丸わかりページへ JOB DESCRIPTION 仕事内容・待遇を見てみる 仕事内容、給与・待遇、選考の流れ。経験者も未経験も!応募前に知りたいこと、まとめました! 募集要項を見る ENTRY エントリーする エントリーは1〜2分・履歴書不要です。まずは話を聞いてみたい、という方でも歓迎です! エントリーフォームへ

RJCで一緒に開発しながら、 成長を楽しみませんか?