履歴と取り消し
Git
log、diff、reset、revert、stash
履歴の確認
git log のオプション集
# 基本
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
# ステージングの取り消し
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操作前に戻す