1

fileAcommit で削除したとしましょうabc123。次に、git resetの出力は、削除されたものをgit diff示していfileAます。fileA私の作業ディレクトリにはもうないので、再度追加することはできません。

のデフォルトはgit resetですgit reset --mixed。これは次のように説明されman git-resetています。

作業ツリーではなくインデックスをリセットし (つまり、変更されたファイルは保存されますが、コミットのマークは付けられません)、更新されていないものを報告します。

エレガントなソリューションとは何ですか。1 つの回避策は、ファイルを含む後のコミットをチェックアウトし、ファイルをコピーしてから、abc123再度チェックアウトして追加することです。

解決策:

以下の2つの解決策は正しいです。1 つは、ファイルが削除されたコミットをチェックアウトし、単純にgit checkout fileA. もう1つは、削除されたコミットより後の現在のコミットでファイルを回復する方法を示していますfileA。あなたが実行しますgit checkout abc123~ -- file A( --checkout コマンドが、ファイルをロールバックしようとしていることを認識し、ブランチを変更していないことを確認します)。

4

3 に答える 3

1

私はこれが起こったことだと思います:

  • abc123を含むコミットをチェックアウトしましたfileA
  • 入力しましたgit rm fileA
  • 入力しましたgit reset

そして今、あなたはこのようなものを見ます:

# On branch 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:    fileA
#

また、ファイルシステム上にないため、元に戻すために使用git addすることはできません。fileA

回復するfileAには、次のように入力しますgit checkout fileA

git reset --hardインデックスまたは作業ツリーに他に気になる変更がない場合にも使用できます。

于 2013-03-13T19:31:00.840 に答える
1

git reset --hardインデックスと作業ツリーをリセットし、削除されたファイルを復元します。現在のヘッドに存在することがわかっている、削除した単一のファイルを単に再追加したい場合は、次の方法で追加できます。

git checkout HEAD -- fileA 
于 2013-03-13T19:31:05.197 に答える
1

特定のバージョンから個々のファイルをチェックアウトできます。

git checkout abc123~ -- fileA

これにより、コミット ID の後のチルダ ( ) のおかげで、削除されfileAたコミットの直前のコミットに存在していたのバージョンがチェックアウトされます。これにより、作業ツリーとともにインデックスが変更されるため、ファイルも追加されたかのようになります。それが望ましくない場合は、作業コピーにファイルを残したまま、インデックスからファイルを削除するために使用できます。abc123~git rm --cached fileA

于 2013-03-13T19:36:40.597 に答える