Skip to content

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

commitcheckoutresetmergeなど、Gitコマンドで行われた変更のログを確認可能。GitのGC(Garbage Collection)が行われない限り、このログである程度の歴史を住き来可能。Gitの操作を誤った場合でも、たいていはgit reflogコマンドを利用して元の状態を復元可能。