エンジニア日記

日々の開発あれこれ

Git Reset と Git Revertの違い

どちらもコミットしたものを取り消すコマンドだが、取り消され方や、取り消されるコミットの範囲の違いをまとめる。

git reset –haed コミットID

指定したコミットIDから以降のコミットをなかったことにする。
コミットログからも抹消される。
例)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
commit abcdefghijklmnopqrstuvwxyz0123456789
Author: Masahiro Hori <mail_address>
Date:   Sun May 22 23:53:54 2016 +0900

    コミット3

commit 0123456789abcdefghijklmnopqrstuvwxyz
Author: Masahiro Hori <mail_address>
Date:   Sun May 22 23:53:20 2016 +0900

    コミット2

commit abcdefghijklm0123456789nopqrstuvwxyz
Author: Masahiro Hori <mail_address>
Date:   Tue May 17 00:40:38 2016 +0900

    コミット1
1
2
git reset --haed 0123456789abcdefghijklmnopqrstuvwxyz
                 (コミット2のコミットIDを渡す)

結果

1
2
3
4
5
commit abcdefghijklm0123456789nopqrstuvwxyz
Author: Masahiro Hori <mail_address>
Date:   Tue May 17 00:40:38 2016 +0900

    コミット1

となり、指定したコミットID以降のコミットが取り消され、コミットログもなくなる。
※取り消前の状態をpushしていれば、コミット取り消後はpushができなくなる。

git revert コミットID

指定したコミットIDのコミットのみ変更を取り消す。
取り消したこともコミットログとして残る。
例)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
commit abcdefghijklmnopqrstuvwxyz0123456789
Author: Masahiro Hori <mail_address>
Date:   Sun May 22 23:53:54 2016 +0900

    コミット3

commit 0123456789abcdefghijklmnopqrstuvwxyz
Author: Masahiro Hori <mail_address>
Date:   Sun May 22 23:53:20 2016 +0900

    コミット2

commit abcdefghijklm0123456789nopqrstuvwxyz
Author: Masahiro Hori <mail_address>
Date:   Tue May 17 00:40:38 2016 +0900

    コミット1
1
2
git revert 0123456789abcdefghijklmnopqrstuvwxyz
           (コミット2のコミットIDを渡す)

結果

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
commit 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ
Author: Masahiro Hori <mail_address>
Date:   Sat Jun 11 12:36:33 2016 +0900

    Revert "コミット2"
    
    This reverts commit 0123456789abcdefghijklmnopqrstuvwxyz.

commit abcdefghijklmnopqrstuvwxyz0123456789
Author: Masahiro Hori <mail_address>
Date:   Sun May 22 23:53:54 2016 +0900

    コミット3

commit 0123456789abcdefghijklmnopqrstuvwxyz
Author: Masahiro Hori <mail_address>
Date:   Sun May 22 23:53:20 2016 +0900

    コミット2

commit abcdefghijklm0123456789nopqrstuvwxyz
Author: Masahiro Hori <mail_address>
Date:   Tue May 17 00:40:38 2016 +0900

    コミット1

となり、コミット2のみのコミット内容が取り消され、コミットログに取り消しログが残る。
※取り消前の状態をpushしていても、コミット取り消後もpushはできる。