git reset
git reset --hard
: リポジトリのHEAD、ステージ、現在のワーキングツリーを指定した状態まで戻る
このコマンドに戻りたい場所のハッシュを与えることにより、その時の状態を完全に復元可能。
sh
git log --graph
* commit **************************************** (HEAD -> main)
|\ Merge: ******* *******
| | Author: ********** <**************>
| | Date: *** *** ** **:**:** **** *****
| |
| | Merge branch 'feature-A'
| |
| * commit **************************************** (feature-A)
|/ Author: ********** <**************>
| Date: *** *** ** **:**:** **** *****
|
| Add feature-A
|
* commit **************************************** (fetature-A)
| Author: ********** <**************>
| Date: *** *** ** **:**:** **** *****
|
| Add index
|
* commit ****************************************
Author: ********** <**************>
Date: *** *** ** **:**:** **** *****
First Commit
git reflog
git log
コマンドだけでは、その状態からの過去のログしか確認できない。git reflog
コマンドを使用すると、現在のリポジトリで行われた作業のログを確認可能。歴史を戻す前のハッシュを見つけ、git reset --hard
コマンドで歴史を戻す前の状態を復元可能。
sh
git reflog
******* (HEAD -> fix-B) HEAD@{0}: commit: Fix B
******* (main, fetature-A) HEAD@{1}: checkout: moving from main to fix-B
******* (main, fetature-A) HEAD@{2}: reset: moving to ****************************************
******* HEAD@{3}: merge feature-A: Merge made by the 'ort' strategy.
******* (main, fetature-A) HEAD@{4}: checkout: moving from fetature-A to main
******* (main, fetature-A) HEAD@{5}: checkout: moving from main to fetature-A
******* (main, fetature-A) HEAD@{6}: checkout: moving from feature-A to main
******* (feature-A) HEAD@{7}: commit: Add feature-A
******* (main, fetature-A) HEAD@{8}: checkout: moving from main to feature-A
******* (main, fetature-A) HEAD@{9}: commit: Add index
******* HEAD@{10}: commit (initial): First commit
commit
、checkout
、reset
、merge
など、Gitコマンドで行われた変更のログを確認可能。GitのGC(Garbage Collection)が行われない限り、このログである程度の歴史を住き来可能。Gitの操作を誤った場合でも、たいていはgit reflog
コマンドを利用して元の状態を復元可能。