概要
“revert”は「元に戻す」意味。
git revert
はコミットの内容を元に戻すためのrevertコミットを実行する- それまでのコミットの履歴を残したまま、その内容を打ち消す
準備
Git – タグで使った以下のリポジトリーを流用。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
[vagrant@localhost example]$ git log commit 23999faf48a9e9802371b691a58e5479888dcdc0 (HEAD -> main, tag: ver_2.0, origin/main, origin/HEAD) Author: taustation <taustation@gmail.com> Date: Fri Aug 13 15:50:41 2021 +0900 commit-3 commit dd51a8331d349b7641d6a95729af16ee3989ecd8 (tag: ver_1.1) Author: taustation <taustation@gmail.com> Date: Fri Aug 13 15:32:15 2021 +0900 commit-2 commit f69f176435cf6436c3b3329af644999ba96da862 (tag: beta) Author: taustation <taustation@gmail.com> Date: Fri Aug 13 15:27:02 2021 +0900 commit-1 commit 449d5ea9fec38c9aec00d22d28f3db88902046c4 Author: taustation <88479749+taustation@users.noreply.github.com> Date: Fri Aug 13 15:03:31 2021 +0900 Initial commit |
HEAD
位置のコミットの内容を確認。commit-3
でファイルに1行追加している。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
[vagrant@localhost example]$ git show HEAD commit 23999faf48a9e9802371b691a58e5479888dcdc0 (HEAD -> main, tag: ver_2.0, origin/main, origin/HEAD) Author: taustation <taustation@gmail.com> Date: Fri Aug 13 15:50:41 2021 +0900 commit-3 diff --git a/sample.txt b/sample.txt index e05e5a6..597975d 100644 --- a/sample.txt +++ b/sample.txt @@ -1,2 +1,3 @@ 新規作成 1行追加 +もう1行追加 |
sample.txtの内容も確認しておく。
1 2 3 4 |
[vagrant@localhost example]$ cat sample.txt 新規作成 1行追加 もう1行追加 |
revert実行
git revert
でHEAD位置のコミットを指定。
git revert HEAD
実行するとエディターが起動し、revertコミットのデフォルトメッセージが表示される。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
Revert "commit-3" This reverts commit 23999faf48a9e9802371b691a58e5479888dcdc0. # Please enter the commit message for your changes. Lines starting # with '#' will be ignored, and an empty message aborts the commit. # # On branch main # Your branch is up to date with 'origin/main'. # # Changes to be committed: # modified: sample.txt # ~ ~ ~ ..... |
このままの内容で保存・終了すると、git revert
の実行結果が表示されている。
1 2 3 4 5 |
[vagrant@localhost example]$ git revert HEAD [main ce9546e] Revert "commit-3" 1 file changed, 1 deletion(-) [main ce9546e] Revert "commit-3" 1 file changed, 1 deletion(-) |
ログを確認するとcommit-3
は残ったままで、その後にRevert "commit-3"
コミットが実行されている。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
[vagrant@localhost example]$ git log commit 2723928591f616489fb3aea124aac4478012b6cb (HEAD -> main) Author: taustation <taustation@gmail.com> Date: Sat Aug 14 08:22:17 2021 +0900 Revert "commit-3" This reverts commit 23999faf48a9e9802371b691a58e5479888dcdc0. commit 23999faf48a9e9802371b691a58e5479888dcdc0 (tag: ver_2.0, origin/main, origin/HEAD) Author: taustation <taustation@gmail.com> Date: Fri Aug 13 15:50:41 2021 +0900 commit-3 ..... |
ファイルの内容はcommit-3
の実行前に戻っている。
1 2 3 |
[vagrant@localhost example]$ cat sample.txt 新規作成 1行追加 |
revertのrevert
revertコミットをさらにrevertすると元に戻る。
1 2 3 4 5 |
[vagrant@localhost example]$ git revert HEAD [main a40caba] Revert "Revert "commit-3"" 1 file changed, 1 insertion(+) [main a40caba] Revert "Revert "commit-3"" 1 file changed, 1 insertion(+) |
ログにも2回のrivertコミットの記録が残る。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
[vagrant@localhost example]$ git log commit a40caba4203611174aa16f7ff4d912630f8f14d9 (HEAD -> main) Author: taustation <taustation@gmail.com> Date: Sat Aug 14 08:22:31 2021 +0900 Revert "Revert "commit-3"" This reverts commit 2723928591f616489fb3aea124aac4478012b6cb. commit 2723928591f616489fb3aea124aac4478012b6cb Author: taustation <taustation@gmail.com> Date: Sat Aug 14 08:22:17 2021 +0900 Revert "commit-3" This reverts commit 23999faf48a9e9802371b691a58e5479888dcdc0. commit 23999faf48a9e9802371b691a58e5479888dcdc0 (tag: ver_2.0, origin/main, origin/HEAD) Author: taustation <taustation@gmail.com> Date: Fri Aug 13 15:50:41 2021 +0900 commit-3 ..... |
sample.txt
の内容も元に戻っている。
1 2 3 4 |
[vagrant@localhost example]$ cat sample.txt 新規作成 1行追加 もう1行追加 |
飛び越しはできない
冒頭のログの状態で、直前のコミットの1つ前のコミットを直接revertしようとするとエラー。
1 2 3 4 5 6 7 |
[vagrant@localhost example]$ git revert ver_1.1 Auto-merging sample.txt CONFLICT (content): Merge conflict in sample.txt error: could not revert dd51a83... commit-2 hint: after resolving the conflicts, mark the corrected paths hint: with 'git add <paths>' or 'git rm <paths>' hint: and commit the result with 'git commit' |
1つずつ遡るのは可能
まず直前のコミットをrevert。
1 2 3 4 5 |
[vagrant@localhost example]$ git revert HEAD [main 6deb4a2] Revert "commit-3" 1 file changed, 1 deletion(-) [main 6deb4a2] Revert "commit-3" 1 file changed, 1 deletion(-) |
ログ確認。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
[vagrant@localhost example]$ git log commit 6deb4a23beb263943722dc5da7110f24f8dbcb92 (HEAD -> main) Author: taustation <taustation@gmail.com> Date: Sat Aug 14 08:29:49 2021 +0900 Revert "commit-3" This reverts commit 23999faf48a9e9802371b691a58e5479888dcdc0. commit 23999faf48a9e9802371b691a58e5479888dcdc0 (tag: ver_2.0, origin/main, origin/HEAD) Author: taustation <taustation@gmail.com> Date: Fri Aug 13 15:50:41 2021 +0900 commit-3 commit dd51a8331d349b7641d6a95729af16ee3989ecd8 (tag: ver_1.1) Author: taustation <taustation@gmail.com> Date: Fri Aug 13 15:32:15 2021 +0900 commit-2 ..... |
その上でcommit-2
(ver_1.1
タグ)のコミットをrevertは可能。
1 2 3 |
[vagrant@localhost example]$ git revert ver_1.1 [main da9e6ed] Revert "commit-2" 1 file changed, 1 deletion(-) |
ログには2回のrevertコミットが残っていて、コミットを遡りながら1行ずつ追加された行を削除している。
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 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
[vagrant@localhost example]$ git log -p commit da9e6ed668f086bda49e5d7f6e0ca5c4b69752d5 (HEAD -> main) Author: taustation <taustation@gmail.com> Date: Sat Aug 14 08:30:03 2021 +0900 Revert "commit-2" This reverts commit dd51a8331d349b7641d6a95729af16ee3989ecd8. diff --git a/sample.txt b/sample.txt index e05e5a6..26ca972 100644 --- a/sample.txt +++ b/sample.txt @@ -1,2 +1 @@ 新規作成 -1行追加 commit 6deb4a23beb263943722dc5da7110f24f8dbcb92 Author: taustation <taustation@gmail.com> Date: Sat Aug 14 08:29:49 2021 +0900 Revert "commit-3" This reverts commit 23999faf48a9e9802371b691a58e5479888dcdc0. diff --git a/sample.txt b/sample.txt index 597975d..e05e5a6 100644 --- a/sample.txt +++ b/sample.txt @@ -1,3 +1,2 @@ 新規作成 1行追加 -もう1行追加 commit 23999faf48a9e9802371b691a58e5479888dcdc0 (tag: ver_2.0, origin/main, origin/HEAD) Author: taustation <taustation@gmail.com> Date: Fri Aug 13 15:50:41 2021 +0900 commit-3 diff --git a/sample.txt b/sample.txt index e05e5a6..597975d 100644 --- a/sample.txt +++ b/sample.txt @@ -1,2 +1,3 @@ 新規作成 1行追加 +もう1行追加 commit dd51a8331d349b7641d6a95729af16ee3989ecd8 (tag: ver_1.1) Author: taustation <taustation@gmail.com> Date: Fri Aug 13 15:32:15 2021 +0900 commit-2 diff --git a/sample.txt b/sample.txt index 26ca972..e05e5a6 100644 --- a/sample.txt +++ b/sample.txt @@ -1 +1,2 @@ 新規作成 +1行追加 ..... |
ファイルはcommit-2
実行前の状態に戻っている。
1 2 |
[vagrant@localhost example]$ cat sample.txt 新規作成 |