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
will not 追跡されていないファイルを削除します。git-cleanは追跡されたルートディレクトリからgit追跡の対象外のファイルを削除します。警告 - これに注意してください。最初にgit-cleanでドライランを実行して、何が削除されるのかを確認すると便利です。
これはエラーメッセージが出たときにも特に便利です。
~"performing this command will cause an un-tracked file to be overwritten"
これは、あなたとあなたの友人が同じ名前の新しいファイルを追加したときに作業コピーを更新することなど、いくつかの作業を行うときに発生する可能性があります。 。
このような状況で、空の状態で実行すると、上書きされる可能性のあるファイルの一覧を表示するのにも役立ちます。
GIT=$(git rev-parse --show-toplevel)
cd $GIT/..
rm -rf $GIT
git clone ...
.gitignore
にリストされたファイル/ディレクトリを削除します(ビルドファイルのように).gitignore
にないファイル/ディレクトリを削除します。以下は私が毎日忘れている他のコマンドです。
git clean -f -d -x
git reset --hard
.gitignore
にリストされたファイル/ディレクトリを削除します(ビルドファイルのように).gitignore
にないファイル/ディレクトリを削除します。git clean -f -d -x
.gitignore
にリストされたファイル/ディレクトリを削除します(ビルドファイルのように).gitignore
にないファイル/ディレクトリを削除します。git reset --hard
.gitignore
にリストされたファイル/ディレクトリを削除します(ビルドファイルのように).gitignore
にないファイル/ディレクトリを削除します。上記すべてを確認するためのテストケース(bashまたはshを使用):
mkdir project
cd project
git init
echo '*.built' > .gitignore
echo 'CODE' > a.sourceCode
mkdir b
echo 'CODE' > b/b.sourceCode
cp -r b c
git add .
git commit -m 'Initial checkin'
echo 'NEW FEATURE' >> a.sourceCode
cp a.sourceCode a.built
rm -rf c
echo 'CODE' > 'd.sourceCode'
も参照のこと。
git revert
前のコミットを元に戻す新しいコミットを作成するgit checkout
以前のコミットに間に合うように戻る(最初に上記のコマンドを実行する必要があるかもしれません)git stash
上記のgit reset
と同じですが、元に戻すことができますすべての変更を元に戻して、現在のリモートマスターに最新の状態にしたい場合(たとえば、マスター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.
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
たくさんの答えを読んでそれらを試した後、私は様々なEdgeのケースを見つけました。
これが私の現在のbashスクリプトです。
#!/bin/sh
git reset --hard
git clean -f -d
git checkout -- HEAD
作業コピーのルートディレクトリから実行します。
危険がある:(コメントを読んでください。私の答えで提案されたコマンドを実行すると、あなたが望む以上に削除されるかもしれません)
実行しなければならなかったディレクトリを含むすべてのファイルを完全に削除する
git clean -f -d
単に言う
git stash
それはあなたのすべての地元の敵を取り除きます。と言うことで、後で使うこともできます
git stash apply
私は同じような問題に出会った。解決策はgit log
を使ってどのバージョンのローカルコミットがリモートと異なるのかを調べることです。 (例えば、バージョンは3c74a11530697214cbcc4b7b98bf7a65952a34ec
です)。
それからgit reset --hard 3c74a11530697214cbcc4b7b98bf7a65952a34ec
を使って変更を元に戻します。
私は同様の問題を探しました、
ローカルコミットを捨てたいと思っていました。
それで以下をしました:
git reset --hard Origin/dev
チェック:
git status
On branch dev
Your branch is up-to-date with 'Origin/dev'.
nothing to commit, working tree clean
ローカルコミットは失われ、最初のクローン状態、上記のポイント1に戻ります。
ローカルブランチでコミットされていないすべての変更を元に戻すためにこれを試してください
$ git reset --hard HEAD
しかし、あなたがこのようなエラーを見れば:
fatal: Unable to create '/directory/for/your/project/.git/index.lock': File exists.
'.git'フォルダに移動してindex.lockファイルを削除することができます。
$ cd /directory/for/your/project/.git/
$ rm index.lock
最後に、もう一度コマンドを実行します。
$ git reset --hard HEAD
あなたは、あなたの作業ディレクトリにあなたの作業/ファイルを隠しておく必要はないかもしれませんが、単にそれらを完全に取り除きます。 git clean
コマンドがこれを行います。
これを行うための一般的な使用例としては、 cruftを削除する マージや外部ツールによって生成された、または他のファイルを削除してクリーンビルドを実行できるようにすることが挙げられます。
このコマンドは、ローカルの作業ディレクトリから追跡されていないファイルを削除するように設計されているため、このコマンドには細心の注意を払う必要があります。このコマンドを実行した後に突然気が変わっても、削除されたファイルの内容を見ることはできません。より安全な代替手段は実行することです
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`