はじめに
以下の状態になった git rm
したファイル。
% git status
On branch master
Your branch is up-to-date with 'origin/master'.
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
deleted: 削除したファイルパス
git reset --hard HEAD 削除したファイルパス
で元に戻せると思ったが、2ステップ必要だった。
方法
以下のステップで解消する。
- ステップ1:削除したファイルのステージングを取消し
- ステップ2:削除したファイルをチェックアウトにより復元
ステップ1:削除したファイルのステージングを取消し
% git reset HEAD 削除したファイルパス
Unstaged changes after reset:
D 削除したファイルパス
or
% git reset 削除したファイルが配置されたディレクトリパス
Unstaged changes after reset:
D 削除したファイルパス
なぜかファイルパスの場合はリビジョン指定は必須だった。
省略したらHEADを指している認識だったけどなぜだろう。。。
ステージングが取り消されている事を確認
% git status
On branch master
Your branch is up-to-date with 'origin/master'.
Changes not staged for commit:
(use "git add/rm <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
deleted: 削除したファイルパス
ステップ2:削除したファイルをチェックアウトにより復元
% git checkout HEAD 削除したファイルパス
※今回の場合はHEADは省略可能
さいごに
git reset --hard
はHEAD、ステージング、ワーキングディレクトリの変更を指定のリビジョンまで巻き戻すものだと思っていたが、削除したファイルにはその概念だけでは通用しなかった。まだ理解できていない概念があるのだろうけど、とりあえず問題は解決したので今回はこの辺で。