-1

コミットのために膨大な数のファイルをステージングしました。

その後、2 つのファイルのみをコミットし、残りのファイルを別のコミットでコミットする方がよいことに気付きました。

git reset <filename>ファイル名のステージングを解除します


すべてのステージングを解除してから、2 つのファイルを再ステージングしてコミットしたかったのです。
次に、残りのすべてのファイルをステージングして、再度コミットします。

As: " git add ." (すべてのファイルをステージング領域に追加)
および " git reset <filename>" (ステージング領域からファイル名を削除)
" git reset ." (すべてのファイルのステージングを解除するのが理にかなっている)

おっとっと..!
これにより、作業ディレクトリが最後にコミットされたバージョンに戻りまし
た。これまでに行ったすべてのファイル編集が失われました。:-(

とにかく「元に戻す」「git reset .」??

これに関するドキュメントは見つかりませんでした。
実際、「 」に関するドキュメントはまったく見つかりませんgit reset .
私の最善の推測は.、ファイル名オプション以外のオプションの値として git が " " を取ったということです。

しかし、これは元に戻せますか?

4

2 に答える 2

1

はい!、 それが判明しました、あなたはできます!!

理由は次のとおりです 。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)

于 2016-04-07T09:26:05.113 に答える