Git はアプリケーションに加えた変更を追跡し、変更をコミットするまでその変更を保持することはわかっています。
以前のコミットに戻すには、次を使用しました:
$ git reset --hard HEAD
HEAD is now at 820f417 micro
ハードドライブ上のファイルを以前のコミットに戻すにはどうすればよいでしょうか?
私の次のステップは次のとおりです。
git add .
git commit -m "revert"
しかし、ハードドライブ上のファイルはどれも変更されていません...
ベストアンサー1
まず、 は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"