まず、これは潜在的に危険なコマンドであることに注意してgit reset --hard
ください。コミットされていない変更がすべて破棄されるからです。git status
安全のために、使用する前に の出力がクリーン (つまり、空) であることを常に確認する必要があります。
最初に次のように言います。
したがって、Git は私がアプリケーションに加えた変更を追跡し、変更をコミットするまでそれらを保持することを知っていますが、ここでハングアップします。
それは正しくありません。Git は、( を使用してgit add
) ファイルをステージングするとき、またはコミットを作成するときにのみ、ファイルの状態を記録します。プロジェクト ファイルが特定の状態にあるコミットを作成すると、それらは非常に安全になりますが、それまでは、Git は実際にはファイルの "変更を追跡" しません。(たとえば、git add
ファイルの新しいバージョンをステージングする場合でも、ステージング領域にあるそのファイルの以前にステージングされたバージョンが上書きされます。)
あなたの質問では、次の質問に進みます。
以前のコミットに戻したいときは、次のコマンドを使用します: git reset --hard HEAD そして git の戻り値: HEAD is now at 820f417 micro
ハードドライブ上のファイルを以前のコミットに戻すにはどうすればよいですか?
その場合git reset --hard <SOME-COMMIT>
、Git は次のことを行います。
- 現在のブランチ (通常は
master
) を に戻し<SOME-COMMIT>
ます。
- 次に、作業ツリー内のファイルとインデックス (「ステージング エリア」) を でコミットされたバージョンと同じにし
<SOME-COMMIT>
ます。
HEAD
現在のブランチ (または現在のコミット) を指しているため、git reset --hard HEAD
コミットされていない変更を破棄するだけです。
ですから、あなたが戻りたい良いコミットが であるとしますf414f31
。(または任意の履歴ブラウザで見つけることができますgit log
。)次に、正確に何をしたいかによって、いくつかの異なるオプションがあります。
- 代わりに、現在のブランチを変更して、古いコミットを指すようにします。でそれを行うことができます
git reset --hard f414f31
。ただし、これはブランチの履歴を書き換えているため、このブランチを誰かと共有している場合は避ける必要があります。また、その後に行ったコミットはブランチf414f31
の履歴に残りません。master
とまったく同じプロジェクトの状態を表す新しいコミットを作成しますがf414f31
、それを履歴に追加するだけなので、履歴が失われることはありません。この回答で提案されている手順を使用してそれを行うことができます-次のようなもの:
git reset --hard f414f31
git reset --soft HEAD@{1}
git commit -m "Reverting to the state of the project at f414f31"