Gitコマンド使い方メモ:switch・restore・stash・rebase【2026年版】

Programming

Gitのコマンドを毎回調べ直すことがあるので、普段使うものを自分用に整理し直す。以前のメモはclone / add / commit / pushが中心だったため、現在よく使うswitch、restore、fetch、stash、rebase、reflog、取り消し操作まで追加した。

まず確認するコマンド

git status
git branch --show-current
git log --oneline --graph --decorate -10

作業前はとりあえずgit statusを見る。ブランチを間違えて作業していることがあるので、現在ブランチも確認しておく。

基本の流れ

git status
git diff
git add .
git diff --staged
git commit -m "Fix login validation"
git push

git diffは未ステージの差分、git diff --stagedは次のコミットに入る差分を確認するときに使う。

リポジトリを取得する

git clone https://github.com/USER/REPOSITORY.git

clone後は通常、リモート名はoriginになる。

ブランチ操作はswitchを使う

git checkoutでも切り替えられるが、ブランチ操作だけならgit switchの方が意図が分かりやすいのでこちらを使う。

# ブランチ一覧
git branch
git branch -a

# 既存ブランチへ移動
git switch develop

# 新しいブランチを作成して移動
git switch -c feature/login

# 直前のブランチへ戻る
git switch -

リモートにだけ存在するブランチも、名前が一意ならgit switch branch-nameで追跡ブランチを作成して切り替えられる場合がある。

リモートの変更を確認する:fetchとpull

ここは混同しやすいので分けて覚える。

# リモートの情報だけ取得
git fetch origin

# リモートとの差分を見る
git log HEAD..origin/main --oneline
git diff HEAD..origin/main

# 取得+現在ブランチへ統合
git pull

git fetchはリモート追跡ブランチを更新するだけなので、まず内容を確認したいときに使いやすい。git pullはfetchした後にmergeまたはrebaseなどで現在ブランチへ統合する。

push

# 追跡設定済みなら
git push

# 新規ブランチを最初にpush
git push -u origin feature/login

-uを付けてupstreamを設定しておけば、次回からgit pushだけでよい。

一時退避:stash

作業途中で別ブランチへ移動したいときに便利。

# 退避
git stash push -m "WIP login form"

# 一覧
git stash list

# 最新を戻してstashから削除
git stash pop

# 戻すだけでstashを残す
git stash apply

# untrackedも含めて退避
git stash -u

大きな変更を長期間stashに置くより、作業ブランチでWIPコミットにした方が安全なことも多い。

変更を取り消す:restore / revert / reset

この3つは用途が違うので、ここを一番注意する。

未コミットのファイル変更を戻す:restore

# ファイルの作業ツリー変更を捨てる
git restore path/to/file

# ステージだけ外す
git restore --staged path/to/file

git restore path/to/fileは未コミットの変更を失うので、必要なら先にdiffを確認する。

公開済みコミットを安全に打ち消す:revert

git revert <commit>

revertは過去の変更を逆にする新しいコミットを作る。すでにpushした共有履歴を戻す場合はこちらを基本にする。

ローカル履歴を戻す:reset

# コミットだけ戻して変更はstage済みのまま
git reset --soft HEAD~1

# コミットとstageを戻し、ファイル変更は残す
git reset HEAD~1

# コミット・stage・作業内容まで捨てる
git reset --hard HEAD~1

--hardは作業内容まで消すため特に注意。push済みの共有ブランチに対して履歴を書き換えるresetは基本的に避ける。

直前のコミットを修正する:amend

# ファイルを追加し忘れた場合
git add forgotten-file
git commit --amend --no-edit

# コミットメッセージを修正
git commit --amend

すでに共有済みのコミットをamendすると履歴が変わるため、push前のローカルコミットで使うのが基本。

mergeとrebase

自分のfeatureブランチへdevelopの最新を取り込む場合のメモ。

# mergeの場合
git fetch origin
git switch feature/login
git merge origin/develop

# rebaseの場合
git fetch origin
git switch feature/login
git rebase origin/develop

mergeは履歴をそのまま統合し、rebaseは自分のコミットの土台を付け替える。共有済みのコミットをrebaseするとコミットIDが変わるため、自分だけが使っている作業ブランチで使う。

rebase中に競合した場合

# 競合を直して
git add <修正したファイル>
git rebase --continue

# やめる場合
git rebase --abort

force pushが必要になった場合

rebaseやamend後に自分のリモートブランチを更新する場合、どうしてもforce pushが必要なことがある。

git push --force-with-lease

--forceより--force-with-leaseを使う。リモート側が想定外に更新されていれば上書きを拒否してくれる。ただし共有ブランチでは履歴を書き換えないのが基本。

履歴を見る

git log --oneline
git log --oneline --graph --decorate --all
git show <commit>
git diff <commit1>..<commit2>

困ったときのreflog

resetやrebaseで「さっきのコミットが見えなくなった」というときは、まずreflogを確認する。

git reflog

HEADが過去にどこを指していたか確認できるので、誤操作から戻せることがある。慌ててさらにresetする前に見る。

リモート確認

git remote -v
git remote get-url origin

よく使う流れ

# 作業開始
git switch develop
git pull
git switch -c feature/example

# 作業中
git status
git diff
git add .
git diff --staged
git commit -m "Implement example"

# リモートへ
git push -u origin feature/example

自分用の注意点

  • 作業前とpush前にgit statusを見る
  • ブランチ切り替えは基本git switch
  • ファイルを戻すならgit restore
  • 共有済みコミットを取り消すなら基本git revert
  • git reset --hardは本当に捨ててよいか確認してから
  • rebaseは自分の作業ブランチ中心に使う
  • forceが必要なら--force-with-leaseを優先
  • 操作を間違えたらまずgit reflogを見る

公式ドキュメントメモ

最終更新:2026年9月

タイトルとURLをコピーしました