git 特定のコミットだけ消したい時(revert)


下図のようにいくつか前の特定のコミットだけを消したい、もとに戻したいというときの方法や手順をなるべくやさしく紹介します。
この方法ではコミット履歴を消したりはしません。(打ち消した歴史が残ります。)

この図では最新がCでBのコミットだけ消したいという状況です。
参考:過去のコミットを打ち消す

消したいコミットのコミット番号を調べる

まずは消したいコミットのコミット番号を調べます。
ここでは図と同じようなコミット履歴があり、Bのコミットを消すということを想定したいと思います。

git log

でコミットログを見ることができます。

C:\Users\hogehoge>git log
commit e0a8bfe80216ed2fc1b86f40edf9d823d9a28eea
Author: hogehoge
Date:   Tue Mar 28 14:30:39 2017 +0900

    C commit

commit 04ceb4571109766e89d5ef16dcbb70ed42eb31f5
Author: hogehoge
Date:   Tue Mar 28 14:30:22 2017 +0900

    B commit

commit fbdfe8f496804135ce25a5a2dc0974e7ebfbce04
Author: hogehoge
Date:   Tue Mar 28 14:29:44 2017 +0900

    A commit

英数字がいっぱい並んでいるのがコミット番号ですね。
Bのコミット番号は04ceb4571109766e89d5ef16dcbb70ed42eb31f5です。

ログを抜けるにはqで抜けられます

コミットを打ち消す(=revertする)

git revert コミット番号
でできます。

実際にBのコミットを消してみます

C:\Users\hogehoge>git revert 04ceb4571109766e89d5ef16dcbb70ed42eb31f5

と打つと、

Revert "B commit"

This reverts commit 04ceb4571109766e89d5ef16dcbb70ed42eb31f5.

# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
# On branch sample
# Your branch is ahead of 'kamorits/develop' by 7 commits.
#   (use "git push" to publish your local commits)
#
# Changes to be committed:
#       deleted:    /src/main/java/com/hoge/SampleRevert2.java
#
# Changes not staged for commit:
#       modified:   gradle.properties
#

と出てきて何やらメッセージを入力するモードに切り替わります。
初心者はここでどうしてよいやら迷いますが、とりあえず:qと打てばこのモードを抜けることができます。

そうするとrevertしたっぽいメッセージが出てきくるのこれで完了です。

試しにもう一度ログを見てみると、

C:\Users\hogehoge>git log
commit 345b1a2e769da9296883f04244408fa904a95248
Author: hogehoge
Date:   Tue Mar 28 14:31:12 2017 +0900

    Revert "B commit"

    This reverts commit 04ceb4571109766e89d5ef16dcbb70ed42eb31f5.

できているようです!

おつかれさまでした。