2012-04-05 16 views
1

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

+1

'git reset -hard'はバージョン管理されていないファイルに影響しません。コミットする前にインデックスに追加していないのですか? –

+0

私は既存のファイルへのコミットで言ったように、はい私も新しいファイルをコミットしました。はい、私はしました。 –

+0

私はインデックスに追加したことを意味します。 –

答えて

4

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

7d6d2bd [email protected]{0}: reset: moving to HEAD~1 
4aaf64d [email protected]{1}: commit: new 

[email protected]{1}あなたの新しいコミットは次のとおりです。 [email protected]{0}は古いものにリセットされていました。これは、あなたがコミットした後、あなたがリセットする前に、それは、た状態にリポジトリを復元し、その新しい

$ git reset --hard [email protected]{1} 

:新しいファイルを(私の例では、それは[email protected]{1}です)失われたリセット前にコミットし、再びリセットファイルを元に戻す必要があります。もともと何をしようとしていたかについては、最新のコミットで追加した新しいファイルを失うことなくリセットする方法がいくつかあります。最も簡単な方法は、混合リセットを行うにはおそらく、その後、チェックアウト:

$ git reset HEAD~1 
$ git checkout . 

混合リセットは、リポジトリにあなたがコミットする前にそれがあった方法を残します - あなたは、古いファイルにコミットされていない変更があるでしょう、新しいファイルはバージョン管理されません。チェックアウトすると古いファイルに変更が戻されますが、新しいファイルはバージョンが変更されていないのでそのまま残します。

+0

ありがとうございます!完璧。 –

関連する問題