私が実行したプロジェクトがありgit init
ます。何度かコミットした後、私はgit status
すべてが最新であり、ローカルな変更はなかったことを教えてくれました。
それから私はいくつかの連続した変更を行い、すべてを捨てて元の状態に戻したいと思いました。このコマンドは私のためにそれを行いますか?
git reset --hard HEAD
私が実行したプロジェクトがありgit init
ます。何度かコミットした後、私はgit status
すべてが最新であり、ローカルな変更はなかったことを教えてくれました。
それから私はいくつかの連続した変更を行い、すべてを捨てて元の状態に戻したいと思いました。このコマンドは私のためにそれを行いますか?
git reset --hard HEAD
作業コピーに加えられた変更を元に戻す場合は、次のようにします。
git checkout .
インデックスに加えられた変更(つまり、追加した変更)を元に戻す場合は、これを行います。警告これにより、プッシュされていないすべてのコミットがマスターにリセットされます!:
git reset
コミットした変更を元に戻したい場合は、次のようにします。
git revert <commit 1> <commit 2>
追跡されていないファイル(新しいファイル、生成されたファイルなど)を削除する場合:
git clean -f
または、追跡されていないディレクトリ(たとえば、新しいディレクトリまたは自動生成されたディレクトリ):
git clean -fd
注:実行することもできます
git clean -fd
なので
git reset --hard
追跡されていないファイルは削除されませんが、git-clean は追跡されたルート ディレクトリから git 追跡下にないファイルを削除します。警告 - これには注意してください。最初に git-clean で予行演習を実行して、何が削除されるかを確認すると便利です。
これは、エラー メッセージが表示された場合にも特に役立ちます。
~"performing this command will cause an un-tracked file to be overwritten"
これは、いくつかのことを行うときに発生する可能性があります.1つは、あなたとあなたの友人が同じ名前の新しいファイルを追加したときに作業コピーを更新することですが、彼は最初にソース管理にコミットしており、追跡されていないコピーを削除することは気にしません.
この状況では、予行演習を行うと、上書きされるファイルのリストを表示するのにも役立ちます。
すべての変更を元に戻し、現在のリモート マスターを最新の状態にしたい場合 (たとえば、マスター HEAD が分岐してから前に移動し、プッシュが「拒否」されていることがわかった場合) を使用できます。
git fetch # will fetch the latest changes on the remote
git reset --hard origin/master # will set your local branch to match the representation of the remote just pulled down.
たくさんの回答を読んで試してみたところ、作業コピーが完全に消去されない場合があるというさまざまなエッジケースが見つかりました。
それを行うための現在のbashスクリプトは次のとおりです。これは常に機能します。
#!/bin/sh
git reset --hard
git clean -f -d
git checkout HEAD
作業コピーのルート ディレクトリから実行します。
git-reflog を調べてください。記憶しているすべての状態が一覧表示され (デフォルトは 30 日)、必要な状態を簡単にチェックアウトできます。例えば:
$ git init > /dev/null
$ touch a
$ git add .
$ git commit -m"Add file a" > /dev/null
$ echo 'foo' >> a
$ git commit -a -m"Append foo to a" > /dev/null
$ for i in b c d e; do echo $i >>a; git commit -a -m"Append $i to a" ;done > /dev/null
$ git reset --hard HEAD^^ > /dev/null
$ cat a
foo
b
c
$ git reflog
145c322 HEAD@{0}: HEAD^^: updating HEAD
ae7c2b3 HEAD@{1}: commit: Append e to a
fdf2c5e HEAD@{2}: commit: Append d to a
145c322 HEAD@{3}: commit: Append c to a
363e22a HEAD@{4}: commit: Append b to a
fa26c43 HEAD@{5}: commit: Append foo to a
0a392a5 HEAD@{6}: commit (initial): Add file a
$ git reset --hard HEAD@{2}
HEAD is now at fdf2c5e Append d to a
$ cat a
foo
b
c
d
単純に実行 -
git stash
ローカルの変更がすべて削除されます。また、後で実行して使用することもできます -
git stash apply
DANGER AHEAD:(コメントを読んでください。私の回答で提案されたコマンドを実行すると、必要以上に削除される可能性があります)
実行しなければならなかったディレクトリを含むすべてのファイルを完全に削除するには
git clean -f -d
同様の問題に遭遇しました。git log
解決策は、ローカル コミットのどのバージョンがリモートと異なるかを調べるために使用することです。(たとえば、バージョンは です3c74a11530697214cbcc4b7b98bf7a65952a34ec
)。
次に、 を使用git reset --hard 3c74a11530697214cbcc4b7b98bf7a65952a34ec
して変更を元に戻します。
プロジェクトの最上位ディレクトリにいる場合は、これを試してください。
git restore .
そうでない場合は、次を使用します。
git restore :/
サブセットのローカル変更を元に戻したい場合:
git restore :/
git restore .
git restore '*.c'
詳細については、git restore のドキュメントを参照してください。
追跡されていないファイルを削除するには:git clean -f
必ずしも作業ディレクトリに作業/ファイルを隠しておく必要があるとは限りませんが、代わりにそれらを完全に削除してください。コマンドgit clean
がこれを行います。
これを行う一般的な使用例としては、クリーン ビルドを実行できるように、マージまたは外部ツールによって生成されたクラフトを削除するか、他のファイルを削除することがあります。
このコマンドは、追跡されていないローカル作業ディレクトリからファイルを削除するように設計されているため、非常に注意する必要があることに注意してください。このコマンドを実行した後に突然気が変わった場合、削除されたファイルの内容を確認することはできません。より安全な代替手段は実行することです
git stash --all
これにより、すべてが削除されますが、すべてが隠し場所に保存されます。この隠し場所は後で使用できます。
ただし、本当にすべてのファイルを削除して作業ディレクトリをクリーンアップしたい場合は、実行する必要があります
git clean -f -d
これにより、コマンドの結果としてアイテムを持たないファイルとサブディレクトリが削除されます。git clean -f -d
コマンドを実行する前に行うべき賢明なことは、実行することです
git clean -f -d -n
実行後に削除されるもののプレビューが表示されますgit clean -f -d
したがって、これは最も攻撃的なものから最も攻撃的でないものまでのオプションの要約です
オプション 1 : すべてのファイルをローカルで削除する (最も積極的)
git clean -f -d
オプション 2 : 上記の影響をプレビューする (最も積極的なプレビュー)
git clean -f -d -n
オプション 3 : すべてのファイルを隠しておく (攻撃性が最も低い)
`git stash --all`
ここに別のオプションを追加します。
私はタイトルを参照しています:ローカルの変更を元に戻します。
コミットのためにステージングされなかった変更にも適用できます。
この場合、次を使用できます。
git restore <file>
前の状態に戻ること。
すべての変更を削除したいだけなら、git checkout .
こちらの方が速くて簡単です。