最後のgitコミットにロールバック


120

私はやった

git commit -m "blah"

次に、いくつかのファイルを追加しました。現在追加されていない、またはコミットされていない現在のファイルをロールバックして削除するにはどうすればよいですか?


15
いいえ、これはOPが要求するものではありません。彼が最後のコミットを取り消すのではなく、最後のコミットにロールバックしたいことは明らかです。彼はいくつかのファイルを追加してコミットしたとは言わなかった。明らかに彼は最後のコミットを望んでいます。
ポール

1
この非常に一般的な質問への回答を見つけるのは難しすぎる
サム

回答:


211

警告エンプター - 先に破壊的なコマンド。

軽減策 - git reflog 必要に応じて節約できます。


1)UNDOローカルファイルの変更とKEEPあなたは、最後のコミット

git reset --hard

2)UNDOローカルファイルの変更およびREMOVEあなたは、最後のコミット

git reset --hard HEAD^

3)KEEPローカルファイルの変更をし、REMOVEあなたが最後にコミット

git reset --soft HEAD^

20
このコマンドは以前のコミットを削除するため、注意して使用してください!git reset --hardの方が安全
rudivonstaden 2013

9
WTFは36票の正解としてこれを行っています。コメントではなく回答を読んだので、これで一日の仕事を失ったばかりです。これは質問に対する正しい答えではありません!
Chris Nevill、2015

1
OKすべてが失われるわけではありません!git reflogを実行すると、リセット前に行ったコミットを確認できます。その後、これらのコミットをチェックアウトできます
Chris Nevill

3
価値があるので、私はOPの質問を「コミットをロールバックして現在のファイルを削除するにはどうすればよいですか」と解釈しましたが、あいまいなままでした。OPは単に「どのように私は追加またはコミットされていない現在のファイルを削除しますか」と言っていた場合、私は違っ理解しているだろう
ジョーHanink

2
GitはAlan Kaysステートメントの正反対です。単純なものは単純でなければならず、複雑なものも可能でなければなりません。...特にその最初の部分の。それでも、回答ありがとうございます。それは助けた。
0xC0000022L

46

すでにステージングされている(インデックスに追加されている)新しく追加されたコンテンツとファイルを削除する場合は、次のコマンドを使用します。

git reset --hard

最新のコミット(メッセージ "blah"が含まれているもの)も削除したい場合は、次のように使用することをお勧めします。

git reset --hard HEAD^

追跡されていないファイル(インデックスにまだ追加されていない新しいファイル)とフォルダーを削除するには、次を使用します。

git clean --force -d

git reset --hard HEAD ^は最新のコミットを完全に削除しますか?元に戻れないの?
user137717

「git clean --force -d」は.gitignoredフォルダーも削除するようです
Alexey Timokhin

15

git reset --hard 作業ディレクトリを最後のコミットに戻し、新規/変更されたファイルを削除します。


2
それをしましたが、ファイルはまだそこにあります。(追跡されていないファイルはまだ残っています)
ブランクマン、2011

この場合、 "git stash"を実行できます
jacktrade

3
これはOPの明確で明確な質問に対する唯一の明確で明確な回答であるため、賛成票を投じました。
ポール

4

git revert HEAD^最後から2番目のコミットに戻すためにを使用して、コミットを戻すことができます。HEAD ^の代わりにIDを使用して、復帰するコミットを指定することもできます^


これは、あなたが言っている意味で「元に戻る」ことはありません。これにより、逆コミットが作成されます。
Stefan Kendall、

4

最後のコミットをコミット解除したい場合は、これを使用してください:

git reset HEAD~

私にとって魅力のように働きます。


2
これが質問に対する正確な答えです
デニスコカボワ

これは承認された答えでなければなりません
amiabl

3

最後のコミット以降のローカルファイルの変更をに戻す簡単で簡単な方法は、それらを新しいブランチに配置することです。

git branch changes
git checkout changes
git add .
git commit

これにより、変更が新しいブランチに残ります。元のブランチに戻り、最後のコミットに戻ります。

git checkout master

新しいブランチは、元のブランチをめちゃくちゃにするリスクなしに変更を元に戻すさまざまな方法を実践するのに適した場所です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.