🌳

git revert備忘録

に公開

git revertとは何か

チーム開発をしていて、revertする機会があるのですが、あまり理解できていなかったので、備忘用です


git revert とは?

git revert は過去のコミットを「打ち消すための新しいコミット」を作るコマンドです。
git reset のように履歴を巻き戻さず、チーム開発でも安全に使えます。


使い方

revertした後はcommitpushを忘れずに!

ケース:直前のコミットを取り消したい場合

git revert HEAD

ケース:2つ前のコミットを取り消したい場合

git revert HEAD~2

ケース:複数のコミットを一気に取り消したい場合

git revert HEAD~3..HEAD

マージコミットをrevertする方法(-mオプション)

マージコミットをrevertするには -m オプションが必要です。

git revert -m 1 <マージコミットのハッシュ>

-m オプションの意味

-m は「マージのどちらの親を残すか(正とするか)」を指定するオプションです。

  • -m 1:1番目の親(通常はマージ先のブランチ)を残す
  • -m 2:2番目の親(マージ元のブランチ)を残す

例:featuremain にマージしたけど取り消したい

git revert -m 1 <マージコミットのハッシュ>

実行結果のイメージ

A - B - C - D ← HEAD
          ⤷ マージコミット(M)

このMをrevertすると:

A - B - C - D - E ← HEAD(EはMを打ち消すコミット)

注意点

  • revertしても履歴は消えません(resetとの大きな違い)
  • マージをrevertすると、再度同じブランチをマージする際にコンフリクトが発生する可能性があります

まとめ

操作 説明
git revert <commit> 通常のコミットを打ち消す
git revert -m 1 <hash> マージコミットを打ち消す(親1を基準に)

おまけ

git revert は単なる「取り消し」ではなく、「どういう意図で取り消したか」も残せる便利な履歴管理手段です。
チーム開発では reset よりも revert を選ぶ方がトラブルも少なくて良いです

Discussion