概要
git reset
は指定したコミットの実行直後まで処理を巻き戻す- それより後のコミットの実行結果は取り消され、履歴も消される
- コミットの指定には、
HEAD
からの相対指定による方法と対象コミットの絶対指定による方法がある - 直前のresetのコミット位置は
ORIG_HEAD
に保持されているので、resetの取り消しは可能
準備
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 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 |
[vagrant@localhost example]$ git log -p 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行追加 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 f69f176435cf6436c3b3329af644999ba96da862 (tag: beta) Author: taustation <taustation@gmail.com> Date: Fri Aug 13 15:27:02 2021 +0900 commit-1 diff --git a/sample.txt b/sample.txt new file mode 100644 index 0000000..26ca972 --- /dev/null +++ b/sample.txt @@ -0,0 +1 @@ +新規作成 commit 449d5ea9fec38c9aec00d22d28f3db88902046c4 Author: taustation <88479749+taustation@users.noreply.github.com> Date: Fri Aug 13 15:03:31 2021 +0900 Initial commit diff --git a/README.md b/README.md new file mode 100644 index 0000000..c6fba08 --- /dev/null +++ b/README.md @@ -0,0 +1 @@ +# example |
最新のsample.txt
の内容を確認。
1 2 3 4 |
[vagrant@localhost example]$ cat sample.txt 新規作成 1行追加 もう1行追加 |
HEADからの相対位置でreset
HEAD
から2つ遡ったcommit-1
終了時までresetするため、HEAD~~
を指定。
get reset --hard HEAD~~
あるいは2つ前を数値指定することもできる。
get reset --hard HEAD~2
1 2 |
[vagrant@localhost example]$ git reset --hard HEAD~~ HEAD is now at f69f176 commit-1 |
ログを確認すると、commit-1
以降のコミットがなくなっている。
1 2 3 4 5 6 7 8 9 10 11 12 |
[vagrant@localhost example]$ git log commit f69f176435cf6436c3b3329af644999ba96da862 (HEAD -> main, 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 |
sample.txt
の内容も、commit-1
実行直後の内容になっている。
1 2 |
[vagrant@localhost example]$ cat sample.txt 新規作成 |
resetの取り消し~ORIG_HEAD
reset前のコミット位置はORIG_HEAD
に保持されている。以下のコマンドで、直前のresetを取り消すことができる。
git reset --hard ORIG_HEAD
1 2 |
[vagrant@localhost example]$ git reset --hard ORIG_HEAD HEAD is now at 23999fa commit-3 |
ログも元に戻っている。
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 |
コミットを絶対指定したreset
遡りたいコミットのチェックサム(の一部)やタグを指定してリセットできる。
先の例でcommit-1まで遡りたい場合、以下は等価。
git reset --hard f69f176435cf6436c3b3329af644999ba96da862
git reset --hard f69f176
git reset --hard beta
チェックサムの一部は元のチェックサムの一部になっていて、git log --oneline
でも表示される。
1 2 3 4 5 |
[vagrant@localhost example]$ git log --oneline 23999fa (HEAD -> main, tag: ver_2.0, origin/main, origin/HEAD) commit-3 dd51a83 (tag: ver_1.1) commit-2 f69f176 (tag: beta) commit-1 449d5ea Initial commit |