0
0

Gitのコミットの取り消し

Posted at

環境

Ubuntu20.4

はじめに

コミットの取り消しの実演を行います。個人で開発している分には、コミットを取り消したい場面に遭遇することは滅多にありません。「しまった、やってしまった。急いで取り消さなくては!」という事態に遭遇したとき、恐らく、気持ちの面では、相当程度焦っていると思われるため、こういった作業は、サクッと行えるようにしておいた方がいいだろうと思います。

やったこと

gitのログを確認すると、現在このようになっています。

$git log --oneline
e6f6bc1 (HEAD) aaaccc
0619520 aa
8786091 ad
1ff8c28 aaa
5d9625c add
b3aa690 add file
8b66d30 ggg
3a68b15 ddd

直前のコミットを1つ取り消します。

$git reset --hard HEAD^

確かに、直前のコミット(aaaccc)が取り消されて、次の履歴であるaaがHEADに繰り上がりました。

$git log --oneline
0619520 (HEAD) aa
8786091 ad
1ff8c28 aaa
5d9625c add
b3aa690 add file
8b66d30 ggg
3a68b15 ddd

もう一度、同じコマンドを実行すると、次は、現在HEADになっているaaが取り消されて、その次の履歴であるadがHEADに繰り上がりました。

$ git reset --hard HEAD^
$ git log --oneline
8786091 (HEAD) ad
1ff8c28 aaa
5d9625c add
b3aa690 add file
8b66d30 ggg
3a68b15 ddd

オプションでHEAD^を指定すると、直前のコミット1つが取り消されますが、HEAD^の代わりに、IDを指定して取り消すこともできます。

現在、HEADになっているIDを指定して取り消しを行いました。当然、何も起こりません。

$git reset --hard 8786091
$ git log --oneline
8786091 (HEAD) ad
1ff8c28 aaa
5d9625c add
b3aa690 add file
8b66d30 ggg
3a68b15 ddd

HEADの次の履歴のIDを指定して取り消しを行います。すると、現在HEADになっているadが取り消されて、次の履歴であるaaaがHEADに繰り上がりました。

$git reset --hard 1ff8c28
$ git log --oneline
1ff8c28 (HEAD) aaa
5d9625c add
b3aa690 add file
8b66d30 ggg
3a68b15 ddd

IDを指定すると、複数のコミットをまとめてごそっと取り消すこともできます。次の例では、2つのコミットを一気に取り消しています。

$git reset --hard b3aa690
$ git log --oneline
b3aa690 (HEAD) add file
8b66d30 ggg
3a68b15 ddd
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0