Git

履歴と取り消し

Git

log、diff、reset、revert、stash

履歴の確認

git log のオプション集

log.sh bash
# 基本
git log
git log --oneline           # 1行表示
git log --oneline --graph   # ブランチのグラフ
git log --oneline --graph --decorate --all  # 全ブランチ

# フィルタリング
git log --author="Alice"
git log --since="2025-01-01" --until="2025-12-31"
git log --grep="feat:"      # コミットメッセージで検索
git log -S "functionName"   # コードの追加・削除で検索
git log --follow file.txt   # ファイルの名前変更を追跡

# フォーマット
git log --pretty=format:"%h %s (%an, %ar)"
# %h: ハッシュ短縮 %s: 件名 %an: 著者名 %ar: 相対時刻

# ファイルの変更履歴
git log -p file.txt          # パッチ形式
git log --stat file.txt      # 変更ファイル一覧
git blame file.txt           # 誰がいつ変更したか
git blame -L 10,20 file.txt  # 行範囲を指定

取り消しと修正

reset、revert、restore、stash

undo.sh bash
# ステージングの取り消し
git restore --staged file.txt  # ステージからワーキングツリーに戻す
git reset HEAD file.txt        # 旧来の方法

# ワーキングツリーの変更を取り消し
git restore file.txt           # 変更を破棄(元に戻す)
git checkout -- file.txt       # 旧来の方法

# コミットの取り消し
git reset --soft  HEAD~1  # コミットを取り消し、変更はステージに残す
git reset --mixed HEAD~1  # コミットを取り消し、変更はワーキングツリーに残す
git reset --hard  HEAD~1  # コミットと変更を完全に削除(危険!)

# 安全な取り消し(pushした後はこちら)
git revert HEAD      # 直前のコミットを打ち消す新コミットを作成
git revert abc1234   # 特定コミットを打ち消す

# stash(作業の一時退避)
git stash               # 現在の変更を退避
git stash push -m "WIP: ログイン機能"
git stash list          # 一覧
git stash pop           # 最新を取り出して削除
git stash apply stash@{1} # 特定を取り出す(削除しない)
git stash drop stash@{0}  # 削除
git stash clear           # 全削除

# reflog(操作履歴)— 誤ってresetした時の救済
git reflog
git reset --hard HEAD@{2}  # 2操作前に戻す