Gitコマンド一覧:場面ごとによく使うものと、危ないもの

公開 書いた人 大林 諒

Gitのコマンドは暗記するものではなく、引くものです。この記事は読み物ではなく表として作りました。サンプル料理教室のホームページ website を例に、場面ごとに使うコマンドを並べ、主なものには実際に動かした表示を付けています。AIが提案してきたコマンドの意味を確かめるときも、ここで引けます。読み終わるというより、困ったときに開いて、打っていいコマンドかどうかを判断できるようになる記事です。

この記事の内容
  1. 先に答えると
  2. 始める:init・clone・config
  3. 状態を見る:status・log・diff・show・blame
  4. 保存する:add・commit
  5. 送る・受け取る:push・pull・fetch・remote
  6. 枝:branch・switch・merge・rebase
  7. 戻す:restore・revert・reset・stash
  8. 印:tag
  9. 調べる:reflog・help
  10. 危ないコマンド
  11. ghとの境目
  12. できないことと、その代わり
  13. よく詰まるところ
  14. 次に読む

先に答えると

毎日使うのは7つで、ほかは必要になってから引けば足ります。消えて困るコマンドは6つだけ覚えておきます。

  • 毎日の7つは git status、git diff、git add、git commit、git push、git pull、git switch です
  • 迷ったら git status を打ちます。何も変わらず、次に打つコマンドの案内まで出ます
  • 打っても何も変わらないのは、status、log、diff、show、blame、reflog です
  • 危ないのは reset --hard、push --force、clean -fd、checkout .、rebase、branch -D です
  • コミットしたものはほぼ戻せます。コミットしていないものは戻せません

コミットは、変更を1回分の記録として残すことです。ここからの表示は、一時フォルダに作った練習用の送り先を相手に動かしたものです。そのため送り先がフォルダの形で出ます。b60a52e のような番号はコミットの番号で、毎回違う値になります。

ファイル・ステージ・履歴・GitHub の4か所と、コマンドが動かす向き
ファイル・ステージ・履歴・GitHub の4か所と、コマンドが動かす向き

始める:init・clone・config

コマンドすること例
git init今のフォルダをGitの管理下に置くgit init website
git clone送り先のリポジトリを手元に複製するgit clone URL
git config名前やメールなどを設定するgit config --global user.name "代表"

リポジトリは、ファイルと履歴をまとめて入れておく箱です。既存のものを受け取るならclone、新しく始めるならinitです。詳しくは「git clone・pull・fetchの違い:受け取る操作の使い分け」にあります。

$ git init website
Initialized empty Git repository in .../website/.git/

$ git clone remote/website.git b-website
Cloning into 'b-website'...
done.

状態を見る:status・log・diff・show・blame

ここは何度打っても壊れません。

コマンドすること
git status今どの枝にいて、何が変わっているか
git logコミットの履歴
git diffまだ git add していない変更の中身
git diff --stagedgit add 済みで、次のコミットに入る変更の中身
git show1つのコミットの中身
git blame ファイル各行を最後に変えたコミットと人
$ git status
On branch main
Your branch is up to date with 'origin/main'.

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
	modified:   menu.html

no changes added to commit (use "git add" and/or "git commit -a")

$ git diff
diff --git a/menu.html b/menu.html
index 1ccb69c..529342b 100644
--- a/menu.html
+++ b/menu.html
@@ -1,2 +1,2 @@
 <h1>料金表</h1>
-<p>和食の基本 6,000円</p>
+<p>和食の基本 6,200円</p>

$ git blame menu.html
^b60a52e (代表 2026-11-08 01:09:11 +0900 1) <h1>料金表</h1>
e7c061b9 (代表 2026-11-08 01:09:11 +0900 2) <p>和食の基本 6,200円</p>

- が消した行、+ が足した行です。

よく使う付け方

付け方分かること
git log --oneline1コミット1行の履歴
git log --oneline --graph --all全部の枝を線の図つきで
git log --oneline -- menu.htmlそのファイルを変えたコミットだけ
git log --author=代表その人のコミットだけ
git log --since=1.weekこの1週間のコミットだけ
git show HEAD~1:menu.html1つ前の版のファイルの中身
git status -sb短い表示。枝と、送り先との差も出る

HEAD は今いる場所のコミット、HEAD~1 はその1つ前です。

$ git log --oneline --graph --all --decorate -5
* 1abe085 (HEAD -> main) 和食の料金を修正
* dfe77db (origin/main, origin/HEAD) 夏の教室を追加
* e7c061b 料金表を修正
* b60a52e 最初の版

$ git show HEAD~1:menu.html
<h1>料金表</h1>
<p>和食の基本 6,000円</p>

(2つ目の表示は、1つ目より前の時点で打ったものです。)

保存する:add・commit

コマンドすること
git add ファイル次のコミットに入れるものを選ぶ
git add .今のフォルダの変更を全部選ぶ。.env なども入るので注意
git commit -m "題名"選んだものを履歴に残す
$ git add menu.html

$ git diff --staged --stat
 menu.html | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

$ git commit -m "料金表を修正"
[main e7c061b] 料金表を修正
 1 file changed, 1 insertion(+), 1 deletion(-)

詳しくは「git add・commit・pushの違い:保存して送るまでの流れ」にあります。

送る・受け取る:push・pull・fetch・remote

コマンドすること手元のファイル
git pushコミットを送る変わらない
git push -u origin 枝新しい枝を初めて送る変わらない
git fetch送り先の更新を受け取るだけ変わらない
git pull受け取って、今の枝に反映する変わる
git remote -v送り先のURLを見る変わらない

origin は送り先につけた呼び名です。外注エンジニアBが夏の教室を送ったあと、代表の手元で確かめる流れは次のとおりです。

$ git fetch
From ../remote/website
   e7c061b..dfe77db  main       -> origin/main

$ git status -sb
## main...origin/main [behind 1]

$ git log --oneline HEAD..origin/main
dfe77db 夏の教室を追加

$ git pull
Updating e7c061b..dfe77db
Fast-forward
 index.html | 1 +
 1 file changed, 1 insertion(+)

[behind 1] は、送り先のほうが1コミット進んでいるという意味です。

枝:branch・switch・merge・rebase

ブランチ(枝)は、本筋の main を止めずに作業を分ける線です。

コマンドすること
git branch枝の一覧。-a で送り先の枝も
git switch 枝枝を移る
git switch -c 枝枝を作って移る
git merge 枝その枝を今の枝へ合流させる
git branch -d 枝合流済みの枝を消す
git rebase 枝今の枝のコミットを、その枝の後ろに付け直す
$ git switch -c fix-menu-price
Switched to a new branch 'fix-menu-price'

$ git commit -m "和食の料金を修正"
[fix-menu-price 1abe085] 和食の料金を修正
 1 file changed, 1 insertion(+), 1 deletion(-)

$ git switch main
Switched to branch 'main'
Your branch is up to date with 'origin/main'.

$ git merge fix-menu-price
Updating dfe77db..1abe085
Fast-forward
 menu.html | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

$ git branch -d fix-menu-price
Deleted branch fix-menu-price (was 1abe085).

rebaseは最初は使わなくてかまいません。外注先に頼まれたときのために、動きだけ載せます。番号が 75df741 から 1546c0c に変わります。コミットを作り直しているからです。

$ git log --oneline --graph --all -4
* 75df741 夏のコースを追加
| * af6f8e3 駐車場の案内を追加
|/  
* 1abe085 和食の料金を修正
* dfe77db 夏の教室を追加

$ git rebase main
Successfully rebased and updated refs/heads/add-summer-menu.

$ git log --oneline --graph --all -4
* 1546c0c 夏のコースを追加
* af6f8e3 駐車場の案内を追加
* 1abe085 和食の料金を修正
* dfe77db 夏の教室を追加

枝の詳しい話は「git branchとmergeの使い方:枝を分けて合流する、GitHub Flowまで」、git switch と git checkout の違いは「git switchとcheckoutの違い:枝を切り替える操作と、detached HEAD」にあります。

戻す:restore・revert・reset・stash

戻したいことコマンド注意
コミット前の変更を捨てるgit restore ファイル捨てたものは戻せない
git add を取り消すgit restore --staged ファイルファイルは消えない
pushしたコミットを打ち消すgit revert コミット履歴に打ち消しが足される
手元のコミットを取り消すgit reset --soft HEAD~1変更は残る。pushしたものには使わない
作業を一時的によけるgit stash新しいファイルはよけない
よけた作業を戻すgit stash pop戻すと一覧から消える
$ git stash
Saved working directory and index state WIP on main: 1546c0c 夏のコースを追加

$ git status --short

$ git stash list
stash@{0}: WIP on main: 1546c0c 夏のコースを追加

$ git revert --no-edit HEAD
[main 088f041] Revert "和食の料金を6,500円に修正"
 Date: Sun Nov 8 01:09:12 2026 +0900
 1 file changed, 1 insertion(+), 1 deletion(-)

git stash は、まだ一度も git add していないファイルをよけません。draft.html だけが新しい状態で打つと、次のように何もよけずに終わります。

$ git stash
No local changes to save

$ git status --short
?? draft.html

使い分けの詳しい話は「Gitで元に戻す:revert・reset・restoreの違いと使い分け」にあります。

印:tag

コマンドすること
git tag印の一覧
git tag -a v1.0 -m "説明"今のコミットに説明つきの印を付ける
git push origin v1.0印を送る。指定しないと送られない
$ git tag -a v1.0 -m "夏の教室を載せた版"

$ git tag
v1.0

$ git push origin v1.0
To ../remote/website.git
 * [new tag]         v1.0 -> v1.0

調べる:reflog・help

コマンドすること
git reflog手元で枝やHEADが動いた記録。消したコミットを探す
git コマンド -h短い使い方
git help コマンド公式の説明の全文
git help -aコマンドの全一覧
$ git reflog -3
088f041 HEAD@{0}: reset: moving to HEAD~1
f66066d HEAD@{1}: commit: 作業の途中
088f041 HEAD@{2}: revert: Revert "和食の料金を6,500円に修正"

git reflog は手元の記録で、別のパソコンには引き継がれません。記録は既定で90日、今の枝から外れたものは30日を過ぎると消える対象になります。

危ないコマンド

AIが提案してきたときも、ここに載っているものは意味を確かめてから打ちます。先に枝を作っておくと、元の場所に戻れます(git branch backup-before-reset)。

コマンド消えるもの戻す手段
git reset --hardコミットしていない変更すべてコミット済みの分は git reflog。未コミットは戻せない
git push --force送り先にある、他の人のコミット他の人の手元に残っていればそこから。--force-with-lease を使う
git clean -fdGitが管理していない新しいファイルとフォルダ戻せない。先に -n で一覧を見る
git checkout .今のフォルダのコミットしていない変更戻せない
git rebase消えないが、コミットの番号が全部変わる途中なら git rebase --abort。終わったあとは git reflog
git branch -D合流していない枝の札git reflog で番号を探して枝を作り直す

reset –hard と reflog

$ git log --oneline -1
bafe470 夏の料金表に変更

$ git reset --hard HEAD~1
HEAD is now at 5c98b7f 代表の修正

$ git reflog -2
5c98b7f HEAD@{0}: reset: moving to HEAD~1
bafe470 HEAD@{1}: commit: 夏の料金表に変更

$ git reset --hard HEAD@{1}
HEAD is now at bafe470 夏の料金表に変更

コミットしていれば、このように戻せます。コミットしていない変更は記録に残りません。

clean と checkout .

確認なしで消えます。git clean は必ず -n(消さずに一覧だけ出す)を先に打ちます。.gitignore に書いたファイルは、-x を付けない限り対象になりません。

$ git status --short
 M index.html

$ git checkout .
Updated 1 path from the index

$ git status --short
?? draft.html
?? tmp/

$ git clean -fdn
Would remove draft.html
Would remove tmp/

$ git clean -fd
Removing draft.html
Removing tmp/

push –force と –force-with-lease

Bが先にpushしたあと、それを受け取っていない代表が送ると拒否されます。--force-with-lease は、受け取っていない更新があれば止まります。--force は止まらず、送り先のBのコミットが消えます。

$ git push
To ../remote/website.git
 ! [rejected]        main -> main (fetch first)
error: failed to push some refs to '../remote/website.git'

$ git push --force-with-lease
To ../remote/website.git
 ! [rejected]        main -> main (stale info)
error: failed to push some refs to '../remote/website.git'

$ git push --force
To ../remote/website.git
 + 4b8c463...5c98b7f main -> main (forced update)

(1つ目の hint: の行は省きました。)ただし git fetch で受け取ったあとなら --force-with-lease も通るので、中身を見ずに打てば同じことです。共有している枝には使いません。

branch -D と rebase

$ git branch -D try-new-design
Deleted branch try-new-design (was 51ebb9e).

$ git switch -c try-new-design 51ebb9e
Switched to a new branch 'try-new-design'

rebaseが途中で止まったら、git rebase --abort で始める前に戻れます。

$ git rebase --abort

$ git status -sb
## fix-title

共有している枝でrebaseすると、他の人の履歴と食い違います。Gitの公式も、他の人が土台にしている枝のrebaseを悪い考えとしています。

危ないコマンドを置き場所ごとに並べ、reflogで戻るものと戻らないものを分けた図
危ないコマンドを置き場所ごとに並べ、reflogで戻るものと戻らないものを分けた図

ghとの境目

git は手元の履歴を扱う道具で、GitHub以外の置き場でも使えます。gh はGitHub専用の道具で、プルリクエストやIssue、GitHub Actionsのような、GitHubのサイトの機能を扱います。git push は履歴を送る操作で、gh pr create はプルリクエストを作る操作です。詳しくは「GitHub CLIの使い方:ghでできることと、gitとの違い」にあります。

できないことと、その代わり

できないことその代わり
コマンドで公開中のサイトを直接戻すGitで戻るのは履歴だけ。反映の仕組みを別に動かす
コミットしていない変更を取り戻すこまめにコミットする
自分の手元から他の人の手元の履歴を消す消せない。共有した時点で手が届かないと考える
コマンドを打たずに同じことをするGitHub DesktopやVS Codeの画面でできる。「GitHub Desktop・Sourcetree・VS Codeの使い方と選び方」へ

よく詰まるところ

症状原因直し方
git log のあと入力できない表示の続きを読む画面に入っているq を押す
git commit で見慣れない画面が開く-m を付けず、題名を書く画面が開いた「git add・commit・pushの違い:保存して送るまでの流れ」の手順で閉じる
not a git repositoryGitの管理下でないフォルダにいるcd でリポジトリのフォルダへ移る
src refspec main does not match anyまだコミットがない、または枝の名前が mastergit status で枝の名前を見て、コミットしてから送る
the branch ... is not fully merged合流していないコミットがある枝を -d で消そうとした合流する。捨てるなら -D
No local changes to save新しいファイルしかなく、stashの対象がないgit stash -u で新しいファイルも含める

コマンドの細かい付け方を思い出したいときは、-h で短い一覧が出ます。

$ git commit -h
usage: git commit [-a | --interactive | --patch] [-s] [-v] [-u[<mode>]] [--amend]

(続きは省略しました。)

実際に運用していると、AIが --force や --hard を提案してくる場面が一番多いです。その行だけをこの表で引いて、何が消えるかを確かめてから進めます。

コマンドの1行は、git・コマンド名・付け方・対象の4つに分けて読める
コマンドの1行は、git・コマンド名・付け方・対象の4つに分けて読める

次に読む

保存して送る流れは「git add・commit・pushの違い:保存して送るまでの流れ」、受け取る操作は「git clone・pull・fetchの違い:受け取る操作の使い分け」にあります。枝の話は「git branchとmergeの使い方:枝を分けて合流する、GitHub Flowまで」、消したものを戻すなら「Gitで元に戻す:revert・reset・restoreの違いと使い分け」を開きます。

あわせて読む