職案人

求職・歴史・仏教などについて掲載するつもりだが、自分の思いつきが多いブログだよ。適当に付き合って下さい。

git resetでコミットを取り消す方法

2022年11月30日 | Git
git resetでコミットを取り消す方法


【開発環境】
OS:Win11(64ビット)
git version 2.37.3.windows.1
VSCode1.72.2


【git resetとは】
git resetは現在のブランチの最新のコミットから、指定したコミットの上までをごっそり削除するコマンド。すなわち、指定したコミットまでコミット履歴を遡るということです。

【Git のシステムのおさらい】
・初期状態

・ワーキングツリー(作業ディレクトリ)にあるファイルを更新する

・addを実行し、インデックス(コミットするためのファイルの状態)に移動させる

・commitを実行し、ローカルリポジトリに移動させる

・最後はpushで、Githubのリモートリポジットへ移動させるが、git resetは、push前の状態でしか使うことだできない!

【git resetのオプション】
1.直前のコミットを取り消したい(コミットのみ取り消し)
git reset --soft HEAD^
 HEAD^:直前のコミットを意味する。
 HEAD~{n} :n個前のコミットを意味する。
--softなので、インデックス・ワーキングツリーはそのまま

2.直前のコミットを取り消したい(マルっと消したい)
git reset --hard HEAD^
 --hardなので、「インデックス・ワーキングツリー」も1つ前のコミットの状態に戻る。

3.コミット後の変更を全部消したい
git reset --hard HEAD
--hardなので、「HEADの位置・インデックス・ワーキングツリー」を全てHEADの位置に動かす。
HEADの位置はそのまま。
「インデックス・ワーキングツリー」の変更が消せる。

4.addを取り消したい
git reset --mixed HEAD
または
git reset HEAD
--mixed(or オプション無し)なので、「HEADの位置・インデックス」をHEADの位置に動かす
従って、インデックスの変更(addした内容)のみ元に戻す。

5.間違えてgit resetしちゃったら・・・
git reset --hard ORIG_HEAD
直前のリセットを取り消したいなら

【サンプル】
1.新たにフォルダー「reset_test」を作り、リポジットする
PS D:\Git\reset_test> git init
Initialized empty Git repository in D:/Git/reset_test/.git/
2、「R_test.txt」ファイルをインデックスに加える
PS D:\Git\reset_test> git add .
3.コミットして、headに移す
PS D:\Git\reset_test> git commit -m 'first commit'
[main (root-commit) e61b146] first commit
1 file changed, 1 insertion(+)
create mode 100644 R_test.txt
PS D:\Git\reset_test>
PS D:\Git\reset_test> git log
commit e61b146e0dc76488dbd11a11d177baf06c5ffc12 (HEAD -> main)
Author: shyokuanjin <shyokuanjin@gmail.com>
Date: Tue Nov 29 11:19:14 2022 +0900

first commit

・2つ目のファイル「R_test2.txt」を作る
PS D:\Git\reset_test> git add .
PS D:\Git\reset_test> git commit -m 'second commit'
[main 39c36b8] second commit
1 file changed, 1 insertion(+)
create mode 100644 R_test2.txt
PS D:\Git\reset_test> git log
commit 39c36b87463c9a26b509defb3fad40f74c569c6b (HEAD -> main)
Author: shyokuanjin <shyokuanjin@gmail.com>
Date: Tue Nov 29 15:17:15 2022 +0900

second commit

commit e61b146e0dc76488dbd11a11d177baf06c5ffc12
Author: shyokuanjin <shyokuanjin@gmail.com>
Date: Tue Nov 29 11:19:14 2022 +0900

first commit

・三番目のファイル「R_test3.txt」を作る
PS D:\Git\reset_test> git add .
PS D:\Git\reset_test> git commit -m 'third commit'
[main 25a076c] third commit
1 file changed, 1 insertion(+)
create mode 100644 R_test3.txt
PS D:\Git\reset_test>
PS D:\Git\reset_test> git log
commit 39c36b87463c9a26b509defb3fad40f74c569c6b (HEAD -> main)
Author: shyokuanjin <shyokuanjin@gmail.com>
Date: Tue Nov 29 15:17:15 2022 +0900

second commit

commit e61b146e0dc76488dbd11a11d177baf06c5ffc12
Author: shyokuanjin <shyokuanjin@gmail.com>
Date: Tue Nov 29 11:19:14 2022 +0900

first commit
Author: shyokuanjin <shyokuanjin@gmail.com>
Date: Tue Nov 29 16:08:39 2022 +0900

third commit

commit 39c36b87463c9a26b509defb3fad40f74c569c6b
Author: shyokuanjin <shyokuanjin@gmail.com>
Date: Tue Nov 29 15:17:15 2022 +0900

second commit

commit e61b146e0dc76488dbd11a11d177baf06c5ffc12
Author: shyokuanjin <shyokuanjin@gmail.com>
Date: Tue Nov 29 11:19:14 2022 +0900

first commit


■三番目のファイル「R_test3.txt」を元に戻す
1.--hard HEAD^の場合
PS D:\Git\reset_test> git reset --hard HEAD^
HEAD is now at 39c36b8 second commit
PS D:\Git\reset_test>


2.--soft HEAD^の場合
PS D:\Git\reset_test> git reset --soft HEAD^
PS D:\Git\reset_test> git status
On branch main
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
new file: R_test2.txt
コミットの前目で戻る


VSCodeで同じことをやってみる
ます、R_test2.txtを「変更」で、コミットする。

R_test1.txtのsoftを押す

同じ様になる



コメント (2)
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする