gitコマンドの使い方 ~ git reset ~

2020年4月27日git-command

git reset コマンド概要

git resetは以下の3つの処理を行うもので、指定するオプション(soft/mixed/hard)によって処理される内容が変わります。

処理内容softmixedhard
HEADの位置を変更
staging-area(ステージングエリア)の内容を変更
working-directory(作業ディレクトリ)の内容を変更

–soft オプション

git reset --soft [commit-hash]

–softオプションが指定された場合は、HEADの位置が指定されたcommit-hashに変更されます。

commit-hashの指定方法については、色々とありますが次のいずれかで指定します。

  • commit-hashを指定
  • branchを指定
  • HEADからの相対値を指定
HEADからの相対値

HEADの1つ前のcommitを示す場合「HEAD^」と指定することができます。
また同様に2つ前の場合は「HEAD^^」と指定します。
そのほか、git reflogの結果で表示される「HEAD@{3}」のような指定方法もあります。

以下の例は、1つ前のcommitにHEADを変更した後に、元のcommitにHEADを戻しています。

(master)
$ git log --oneline
275da37 (HEAD -> master) commit-C
03d078e commit-B
5dad790 commit-A

(master)
$ git reset HEAD^

(master)
$ git log --oneline
03d078e (HEAD -> master) commit-B
5dad790 commit-A

(master)
$ git reset 275da37

(master)
$ git log --oneline
275da37 (HEAD -> master) commit-C
03d078e commit-B
5dad790 commit-A

–mixedオプション

git reset --mixed [commit-hash]

–mixedオプションが指定された場合は、HEADの位置が指定されたcommit-hashに変更されます。

また、staging-area(ステージングエリア)の内容も指定したcommitの内容に変更されます。

–mixedオプションはgit resetのデフォルトオプションですので、オプションを指定しない場合は–mixedを指定した場合と同じ動作になります。

commit-hashの指定方法については–softの場合と同じです。

以下の例は、1つ前のcommitにHEADを変更した後に、元のcommitにHEADを戻しています。

staging-area(ステージングエリア)の内容が変更されていることに注目して下さい。

(master)
$ git ls-files
file-A.txt
file-B.txt
file-C.txt

(master)
$ git log --oneline
275da37 (HEAD -> master) commit-C
03d078e commit-B
5dad790 commit-A

(master)
$ git reset HEAD^

(master)
$ git ls-files
file-A.txt
file-B.txt

(master)
$ git log --oneline
03d078e (HEAD -> master) commit-B
5dad790 commit-A

(master)
$ git reset 275da37

(master)
$ git ls-files
file-A.txt
file-B.txt
file-C.txt

(master)
$ git log --oneline
275da37 (HEAD -> master) commit-C
03d078e commit-B
5dad790 commit-A

–hardオプション

git reset --hard [commit-hash]

–hardオプションが指定された場合は、HEADの位置が指定されたcommit-hashに変更されます。

また、staging-area(ステージングエリア)とworking-directory(作業ディレクトリ)の内容も指定したcommitの内容に変更されます。

commit-hashの指定方法については–softの場合と同じです。

以下の例は、1つ前のcommitにHEADを変更した後に、元のcommitにHEADを戻しています。

staging-area(ステージングエリア)とworking-directory(作業ディレクトリ)の内容が変更されていることに注目して下さい。

(master)
$ git ls-files
file-A.txt
file-B.txt
file-C.txt

(master)
$ ls
file-A.txt  file-B.txt  file-C.txt

(master)
$ git log --oneline
275da37 (HEAD -> master) commit-C
03d078e commit-B
5dad790 commit-A

(master)
$ git reset --hard HEAD^
HEAD is now at 03d078e commit-B

(master)
$ git ls-files
file-A.txt
file-B.txt

(master)
$ ls
file-A.txt  file-B.txt

(master)
$ git log --oneline
03d078e (HEAD -> master) commit-B
5dad790 commit-A

(master)
$ git reset --hard 275da37
HEAD is now at 275da37 commit-C

(master)
$ git ls-files
file-A.txt
file-B.txt
file-C.txt

(master)
$ ls
file-A.txt  file-B.txt  file-C.txt

(master)
$ git log --oneline
275da37 (HEAD -> master) commit-C
03d078e commit-B
5dad790 commit-A

git reset の全てのオプションを確認する方法

以下のコマンドを実行するとブラウザでgit resetのヘルプページが表示される

git reset --help

Gitコマンドの使い方一覧

git-command

Posted by snow