reset と revert の違い - kagomen/git-tutorial GitHub Wiki

reset

  • 主な用途
    • 未pushのコミットを、特定のコミットまで取り消す(HEAD~0が最新のコミット。git reflogで確認可能)
      • 特定のコミットのみ取り消したい場合は、revertかrebaseを使う
  • --soft: コミット履歴だけ取り消し
  • --mixed(デフォルト): 作業内容だけ残す
  • --hard: 作業内容もすべて取り消し

revert

  • 主な用途
    • push済みのコミットを、変更前の内容で新しいコミットとして上書きする
  • 通常フロー:
    • git revert <コミットハッシュ>
    • コミット編集画面が開くので編集
    • git push
  • コンフリクト発生時:
    • git revert <コミットハッシュ>
    • git status で状況確認
    • コンフリクト解消
    • git add <ファイル名>
    • git revert --continue
    • コミット編集画面が開くので編集
    • git push
  • revertを中止したい:
    • git revert --abort

特定のコミットのみ取り消したい

  • rebase
    • 履歴を変えるので、未pushのブランチに限る
    • git rebase -i HEAD~5
    • 取り消したいコミットをpick → dropに変更
      pick a1b2c3d 1番目のコミット
      pick d4e5f6g 2番目のコミット  
      pick h7i8j9k 3番目のコミット
      drop l1m2n3o 4番目のコミット
      pick p4q5r6s 5番目のコミット
      
  • revert
    • 前述を参考
⚠️ **GitHub.com Fallback** ⚠️