はい!、 それが判明しました、あなたはできます!!
理由は次のとおりです 。gitは次のように解釈git reset .しますgit reset --hard
そのため、作業ディレクトリ内のすべての変更が削除され、すべてが最後のコミットの状態に戻りました。
私が失ったファイルの編集を回復する組み込みの方法はありません。
ただし、git add .それらの編集を含む各ファイルのコピーを保存しました。
上記のファイルの状態をどこに/どのようにgit保存したかを把握する必要があります。
つまり、次の手順を実行します。
(1):
git fsck --cache --unreachable $(git for-each-ref --format="%(objectname)") \
$(egrep commit all | cut -d ' ' -f 3) > stagedNotCommitted
これにより、git がインデックスを作成した (ステージングされているため) ファイルのリストが検索され
、コミットされていないファイルのリストが、次の名前のファイルに
配置されます。stagedNotCommitted
git はこれらのファイルのファイル名を認識していないためstagedNotCommitted、インデックス化されたファイルのハッシュのリストになります。のように見える
`369c722e8df1c83b6ebfc0dc2d426aa612535203
63282280da679aa19d6a2a71e08bed8487f7e688
6a540aa36ee558611528176dbf87ad8e39475222
9c8ce87dd8aff2abc78d8a5dbe976473c6fea3de
9e20a6530229dac42cb87dc0a7153edb4bad96b5
abec86bc81f8b473e5ea8f0320589619d5e726b2
b830a382cd30308782a1df12e553227100b47ba4
c8bc4788fee301c8c88ed29739927689742c55bf
f87c9f32da264e5e0b9de3d1818e291a687adab9`
...
(2) :
ここから、各ファイルをテキスト エディター (私は Sublime を使用) で開き、復元したいファイルを正しい名前で保存します。
私がこれを行った方法は、「到達できないブログ」を一時ファイルに保存することでした:
(各ファイルの最初の数桁だけを使用できます)
$ git show 89f45 > _02_89f45
$ git show 07f9c > _03_07f9c
$ git show 23ad5 > _04_23ad5
...
そこから、これらすべてのファイルを崇高に開くのは簡単でした。
適当な名前で保存し直してください。
終わり !!:-)
これは、回復したいすべてのファイルを既にステージングしたためにのみ機能することに注意してください。
それらを(すべて)ステージングしていなかったら、運が悪かったでしょう。(またはそれらの一部しか回復できませんでした。)
詳細については、StackOverflow で役立つと思われる次のリンクを参照してください。
これは素晴らしい説明で特に便利です!
ステージング領域のコミットされていないファイルで git reset --hard を元に戻す
その他:
良い、よく説明された情報:
git reset --hard HEAD~1 を元に戻すにはどうすればよいですか?
これには、あなたのためにそれを行うと主張するプラグインをリンクする投稿もあります:
Recovering added file after doing git reset --hard HEAD^
最後に、興味深い表があります:
https://www.atlassian.com/git/tutorials/resetting-checking-out-and-reverting/summary
Command Scope Common use cases
git reset Commit-level Discard commits in a private branch or throw away uncommited changes
git reset File-level Unstage a file
git checkout Commit-level Switch between branches or inspect old snapshots
git checkout File-level Discard changes in the working directory
git revert Commit-level Undo commits in a public branch
git revert File-level (N/A)