web-dev-qa-db-ja.com

Git:以前のコミットステータスに戻します

よくわかりません。 「gitlog」で特定した前のコミットに戻りたい。

しかし、「git checkout」を実行すると、コミットとは言われません。何も変わりません。デタッチHEADモードになっていることを示していますが、必要なファイルがありません。

私が間違っている効果は何ですか?

MrB

24
MrBubbles

git reset --hard <commit>マンページから:

作業ツリーとインデックスを、切り替え先のツリーのものと一致させます。作業ツリー内の追跡ファイルへの変更はすべて失われます。

git checkoutは、作業ディレクトリを別のブランチまたはコミットに切り替えるためのものです。これはHEADをそこに移動しません。

20
Marc W

git reset -hard it is PERMANENT!

使ってください

git stash -u 

代わりに!偶然にザッピングした作品がそこにある場合でも、それを取り戻すことができます。ブランチを作成してプッシュすることを選択しない限り、これがリモートにプッシュされることはありません。

また、git checkoutを使用して同じことを達成できるという正しい方向に進んでいます。構文は

git checkout HEAD -- . 

ただし、git reset --hardと同じ問題があります。隠し場所に固執すれば、将来的に髪を失うことを防ぐことができます。

長い答え

上記のソリューションは、すべての変更を元に戻します。しかし、あなたはいくつかの変更を取り除く方法を尋ねました。完全を期すためにこれを追加します。

これを行うには、次のことができます

git add file1 file2 file3
git stash save --patch

これで、正確に何を消したいかを尋ねられます...これまでの粒度のレベルまで。したがって、必要に応じて、1つのファイルに対するわずかな変更のみを安全に「拒否」できます。

8
Adam Dymitruk