[解決済み] git reset --hard HEAD' を使って以前のコミットに戻すにはどうしたらいいですか?重複] [重複] [重複
質問
Git は私がアプリケーションに加えた変更を追跡し、私が変更をコミットするまでそれを保持することは知っていますが、ここでつまづきました。
前のコミットに戻したいときは、次のようにします。
git reset --hard HEAD
そしてGitが戻ってきます。
HEAD is now at 820f417 micro
ハードディスクにあるファイルをその前のコミットに戻すにはどうしたらいいのでしょうか?
私が次に行ったのは
git add .
git commit -m "revert"
でも、ハードディスク内のファイルはどれも変わっていない...。
何が正しくて、何が間違っているのでしょうか?
どうすればいい?
まず、常に注目すべきは
git reset --hard
は潜在的に危険なコマンドです。なぜなら、コミットされていない変更をすべて捨ててしまうからです。安全のために、あなたは常に
git status
は、使用する前にクリーン(つまり、空)であることを確認してください。
当初は次のように言っていましたね。
Git が自分のアプリケーションに加えた変更を追跡し、その変更をコミットするまで保持することはわかりましたが、ここでつまづきました。
それは間違いです。Gitは、あなたがファイルをステージしたときにのみ、ファイルの状態を記録します(
git add
) またはコミットを作成したときです。プロジェクトファイルを特定の状態にするコミットを作成したら、それらは非常に安全です。しかし、それまではGitはファイルへの変更を実際にquot;tracking"していません。(例えば、あなたが
git add
を実行して新しいバージョンのファイルをステージングすると、ステージングエリアにあるそのファイルの以前のステージングバージョンが上書きされます)。
ご質問の中で、次に次のようなことが書かれていますね。
前のコミットに戻したいときは、次のようにします: git reset --hard HEAD そして、gitは返します。HEAD は現在 820f417 にあります。
ハードディスクにあるファイルをその前のコミットに戻すにはどうしたらいいですか?
もし、あなたが
git reset --hard <SOME-COMMIT>
であれば、Git はそうします。
-
現在のブランチ(通常は
master
を指すように戻す。<SOME-COMMIT>
. -
そして、作業ツリーとインデックス ("staging area") にあるファイルを、以下の手順でコミットしたバージョンと同じにするのです。
<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"
関連
-
[解決済み] Git で直近のローカルコミットを取り消すには?
-
[解決済み] Gitブランチをローカルやリモートで削除するには?
-
[解決済み] コミット前に 'git add' を取り消すにはどうすればよいですか?
-
[解決済み] リモートのGitブランチをチェックアウトするには?
-
[解決済み] 既存の、プッシュされていないコミットメッセージを修正するには?
-
[解決済み] Git リポジトリを以前のコミットに戻すにはどうすればよいですか?
-
[解決済み] ファイルをリセットしたり、特定のリビジョンに戻したりするにはどうすればよいですか?
-
[解決済み】"git pull" でローカルファイルを強制的に上書きするには?
-
[解決済み] Git で最新のコミットを新しいブランチに移動する
-
[解決済み】ローカルのGitブランチの名前を変更するには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] 現在のブランチのトラッキング情報がありません。
-
[解決済み】マージ後のコミットでGitエラー - fatal: マージ中に部分コミットができない
-
Gitのプッシュでエラーが発生! [リモート拒否] master -> master (pre-receive hook declined) error: failed to push some refs to .......
-
[解決済み] git status に fatal: bad object HEAD と表示される。
-
[解決済み] GitBash | origin master - rejected (fetch first) | GitHub リポジトリにファイルがない。
-
[解決済み] Git リポジトリを以前のコミットに戻すにはどうすればよいですか?
-
[解決済み] 現在のGit作業ツリーからローカル(未追跡)ファイルを削除する方法
-
[解決済み] git のコミットを削除しても、変更は維持できますか?
-
[解決済み] GitでSHAハッシュによるコミットの取り消し?重複
-
[解決済み] Git Gitでサーバーリポジトリから単一のファイルを引き出すには?