1

私はEclipseでgitを使用しています。新しいファイルを作成し、既存のバージョン管理されたファイルに変更を加えました。変更をコミットしてプルしようとしましたが、既存のバージョン管理されたファイルと競合しました。解決できなかったので、最終的にコミット前にハードリセットしました。これにより競合が修正されましたが、作成した新しいバージョン管理されていないファイルも削除されました。そのファイルを取り戻す方法はありますか?ハードリセットがバージョン管理されていないファイルに影響を与えるとは思いませんでした。

4

1 に答える 1

4

git reset --hardバージョン管理されていないファイルには影響しませんが、新しいファイルをインデックスに追加してコミットすると、バージョン管理されていないため、そのファイルを持たないコミットにリセットすると失われます。そのファイルを追加したコミットにリセットすることで、元に戻すことができます。実行しますgit reflog。次の行に沿って出力が得られます。

7d6d2bd HEAD@{0}: reset: moving to HEAD~1
4aaf64d HEAD@{1}: commit: new

HEAD@{1}あなたの新しいコミットでした。HEAD@{0}古いものにリセットしていました。新しいファイルを失ったリセット前のコミットに再度リセットします(私の例では、それはですHEAD@{1}):

$ git reset --hard HEAD@{1}

これにより、コミット後、リセット前の状態にリポジトリが復元されるため、新しいファイルが元に戻るはずです。最初に何をしようとしていたかについては、最新のコミットで追加した新しいファイルを失うことなくリセットする方法がいくつかあります。最も簡単な方法は、おそらく混合リセットを実行してからチェックアウトすることです。

$ git reset HEAD~1
$ git checkout .

混合リセットでは、リポジトリはコミット前の状態のままになります。古いファイルへの変更はコミットされておらず、新しいファイルはバージョン管理されていません。チェックアウトは変更を古いファイルに戻しますが、新しいファイルは現在バージョン管理されていないため、そのままにしておきます

于 2012-04-05T08:03:19.833 に答える