gitの最後のコミット後にすべての変更をリセットします


324

追加したファイルの削除、変更したファイルのリセット、削除したファイルの追加など、最後のコミット後にディレクトリに加えたすべての変更を元に戻すにはどうすればよいですか?



8
@nawfalは重複している可能性がありますが、「最後のコミット後にすべての変更をリセット」は、対応する「gitリポジトリを元に戻す方法」よりも多くの検索基準(Googleで検索される単語)に一致します。少なくとも私の母国語が英語ではない人のために:d
Shirish Herwade 2017

回答:


561

最初に変更をリセットします

git reset HEAD --hard

次に、追跡されていないものをすべて消去します。のために追跡されないファイルを保持する場合は.gitignore、このコマンドに注意してください。

git clean -fd

7
@Adam:無視するファイルも削除するように指示する-xオプションも必要になる場合がありgit cleanます。
カスカベル2011年

31
.gitignoreが原因で追跡されないファイルを保持する場合は、git clean -fdコマンドに注意してください。
bitsoflogic 2014

3
@Levinaris:git clean -fd無視されたファイルを削除しないという逆の方法です。-x意志。
Robert Siemer、2015年

5
@RobertSiemer実際、それは可能です!無視されたファイルのみで構成されたフォルダがある場合、それらのフォルダは削除され、無視されたファイルが削除されます。ここにあるような.gitignoreファイルを考えてください:stackoverflow.com/q/25554504/456645。この例では、いくつかのフォルダーにPHPファイルがないと想定しています。 git clean -fdこれらのフォルダと追跡されていないファイルを削除します。gitバージョン1.9.1でテスト
bitsoflogic

3
しかし、なぜ2番目の「クリーンアウト」がまったく必要なのでしょうか。
Shirish Herwade 2017

71

追加したファイルの削除、変更したファイルのリセット、削除したファイルの追加など、最後のコミット後にディレクトリに加えたすべての変更を元に戻すにはどうすればよいですか?

  1. 追跡されたファイルへの変更を元に戻すことができます:

    git reset HEAD --hard
    
  2. 追跡されていないファイルは次の方法で削除できます。

    git clean -f
    
  3. 次のようにして、追跡されていないファイルとディレクトリを削除できます。

    git clean -fd
    

    ただし、追跡されていないファイルへの変更を元に戻すことはできません

  4. 無視され追跡されていないファイルとディレクトリを削除できます

    git clean -fdx
    

    ただし、無視されたファイルへの変更を元に戻すことはできません

また、設定することができますclean.requireForcefalse

git config --global --add clean.requireForce false

使用時に-f--force)を使用しないようにしますgit clean


2
すごい、ちょうど私が必要としたもの。関連するすべてのコマンドを比較していただきありがとうございます。
マーキー2017年

-1

この状況で機能する2つのコマンドがあります。

root> git reset --hard HEAD〜1

root> git push -f

その他のgitコマンドについては、このページを参照してください


1
git push -f質問とは関係なく、このシナリオでは危険です
moustache1up
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.