私はgitリポジトリのクローンを作成し、ブランチをチェックアウトしました。私はそれに取り組んだ後、元のコピーが欲しいので、ローカルの変更をすべて削除することにしました。
つまり、ローカルの変更を削除するには、次の2つのコマンドを実行する必要がありました。
git checkout .
git clean -f
私の質問は、
(1)これはローカルな変更を取り除くための正しいアプローチですか、それとも正しいアプローチを教えてください。
(2)git reset --hard
このコマンドなしでもリセットできるのでいつ使用するのですか?
ありがとう
*解決策:メジャー編集:03/26:* 曖昧な用語の多くをgit固有の用語に置き換え[追跡/追跡解除/ステージング/ステージング解除]
ローカルで変更を加える場合、ファイルのカテゴリは3つしかありません。
タイプ1.ステージングされた追跡ファイル
タイプ2.ステージングされていない追跡ファイル
タイプ3. Unstaged UnTracked files aka UnTracked files
- ステージング済み-ステージング領域に移動されたもの/インデックスに追加されたもの
- 追跡-変更されたファイル
- UnTracked-新しいファイル。常にステージングされていません。ステージングされている場合は、追跡されていることを意味します。
各コマンドの機能:
git checkout .
-ステージングされていない追跡ファイルのみを削除します[タイプ2]git clean -f
-Unstaged UnTrackedファイルのみを削除します[タイプ3]git reset --hard
-段階的追跡ファイルと非段階的追跡ファイルのみを削除します[タイプ1、タイプ2]git stash -u
-すべての変更を削除します[タイプ1、タイプ2、タイプ3]
結論:
どちらかを使用できることは明らかです
(1) combination of `git clean -f` and `git reset --hard`
または
(2) `git stash -u`
望ましい結果を達成するため。
注:「隠しておく」とは、「(何か)を安全かつ特定の場所に安全に保管する」という意味です。これは常にを使用して取得できますgit stash pop
。したがって、上記の2つのオプションから選択することは、開発者の呼び出しです。
ChristophとFrederikSchøningに感謝します。
編集:03/27
「注意」のメモを書いておく価値があると思いましたgit clean -f
git clean -f
後戻りはありません。-n
または--dry-run
を使用して、行うダメージをプレビューします。
ディレクトリも削除したい場合は、 git clean -f -d
無視したファイルを削除したいだけの場合は、 git clean -f -X
無視されたファイルと無視されていないファイルを削除する場合は、次を実行します。 git clean -f -x
参照:詳細git clean
:現在のGit作業ツリーからローカル(追跡されていない)ファイルを削除する方法
編集:05/20/15
このブランチのすべてのローカルコミットを破棄する [ローカルコミットを削除する]
このブランチのすべてのローカルコミットを破棄して、ローカルブランチをこのブランチの「上流」と同一にするには、次のコマンドを実行します。 git reset --hard @{u}
リファレンス:http : //sethrobertson.github.io/GitFixUm/fixup.html
またはgit reset --hard origin/master
[ローカルブランチがの場合master
]
注:2015年6月12日 これは、重複としてマークされている他のSO質問の重複ではありません。この質問では、ローカルGITの変更を削除する方法について説明します[追加されたファイルを削除する、既存のファイルに追加された変更を削除するなど]およびさまざまなアプローチ。他のSOスレッドでは、ローカルコミットを削除する方法のみを扱います。ファイルを追加し、それだけを削除したい場合、他のSOスレッドはそれについて議論しません。したがって、これは他のものの複製ではありません]
編集:06/23/15
すでにリモートリポジトリにプッシュされているコミットを元に戻す方法は?
$ git revert ab12cd15
編集:09/01/2015
ローカルブランチとリモートブランチから以前のコミットを削除します
ケース:ローカルブランチに変更をコミットし、すぐにリモートブランチにプッシュしました。この変更は必要ありません。今何をしますか?
git reset --hard HEAD~1
[ローカルブランチからそのコミットを削除するため]
git push origin HEAD --force
[両方のコマンドを実行する必要があります。リモートブランチから削除する場合]
ブランチはどうですか?現在チェックアウトされているブランチです。
2015年9月8日編集 -ローカルのgit マージを削除します:
私はブランチにいて、新しく機能するブランチとmaster
ブランチをマージmaster
しましたphase2
$ git status
# On branch master
$ git merge phase2
$ git status
# On branch master
# Your branch is ahead of 'origin/master' by 8 commits.
Q:このマージを取り除くにはどうすればよいですか?試したところgit reset --hard
、git clean -d -f
どちらも機能しませんでした。
唯一働いは、以下のもののいずれかであります:
$ git reset --hard origin/master
または
$ git reset --hard HEAD~8
または
$ git reset --hard 9a88396f51e2a068bb7
[sha commit code-これは、すべてのマージコミットが発生する前に存在していたコードです]
git stash -a
[または--all]は、無視され追跡されていないファイルも隠します。git clean -x
無視されたファイルもクリーンアップします。git clean -X
無視されたファイルのみをクリーンアップします。