[解決済み] ローカルのGitの変更を削除するさまざまな方法
質問
gitリポジトリをクローンして、ブランチをチェックアウトしたところです。私はそのブランチで作業した後、オリジナルのコピーが欲しかったので、ローカルでの変更をすべて削除することにしました。
要するに、ローカルの変更を削除するために、以下の2つのコマンドを実行する必要がありました。
git checkout .
git clean -f
質問です。
(1)ローカルチェンジを解消する上で、この方法は正しいのでしょうか、他に正しい方法を教えてください。
(2)どのような場合に
git reset --hard
このコマンドを使わなくても、リセットできるようになりました。
ありがとうございます。
*Solution : Major Edit(s): 03/26 : * 曖昧な用語の多くをgit特有の用語に置き換えた。 [tracked/untracked/staged/unstaged] です。
ローカルに変更を加える場合、3つのカテゴリーしかない可能性があります。
タイプ1.ステージングされた追跡ファイル
タイプ2. アンステージトラックファイル
タイプ3. ステージングされていないUnTrackedファイル、別名UnTrackedファイル
- ステージングされたもの - ステージング・エリアに移動したもの/インデックスに追加されたもの
- 追跡 - 修正されたファイル
- UnTracked - 新しいファイル。常にステージングされていない。ステージングされている場合は、追跡されていることを意味します。
各コマンドが行うこと。
-
git checkout .
- ステージングされていないTrackedファイルのみを削除する[タイプ2]。 -
git clean -f
- ステージングされていないUntrackedファイルのみを削除する[タイプ3]。 -
git reset --hard
- ステージングされたトラッキングファイルおよびステージングされていないトラッキングファイルONLY[タイプ1、タイプ2]を削除します。 -
git stash -u
- すべての変更点[タイプ1、タイプ2、タイプ3]を削除します。
結論
のどちらかを使用できることは明らかです。
(1) combination of `git clean -f` and `git reset --hard`
または
(2) `git stash -u`
を使用すると、目的の結果を得ることができます。
注)Stashingとは、言葉の通り「(何かを)安全に、こっそりと指定された場所に保管する」という意味です。これはいつでも、次のようにして取り出すことができます。
git stash pop
.
ですから、上記の2つのオプションのどちらを選ぶかは、開発者の判断になります。
Christophさん、Frederik Schø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
このブランチのすべてのローカルコミットを破棄 [ローカルコミットを削除する]をクリックします。
このブランチのすべてのローカルコミットを破棄して、ローカルブランチを同一にするには
をこのブランチの"upstream" と共に実行するだけです。
git reset --hard @{u}
参考にしてください。 http://sethrobertson.github.io/GitFixUm/fixup.html
または
git reset --hard origin/master
[ローカルブランチが
master
]
備考:2015/12/06 これは ではない は、他のSOの質問と重複しており、重複とマークされています。この質問では、GIT のローカルな変更を削除する方法 [追加されたファイルを削除する、既存のファイルに追加された変更を削除するなど、さまざまなアプローチ] を扱っていますが、他の SO のスレッドではローカルコミットを削除する方法のみを扱っています。もし、あなたがファイルを追加し、それだけを削除したい場合、他のSOスレッドではそれについて議論されていません。したがって、これはもう一つのスレッドと重複していません]。
編集:2015/06/23
リモートリポジトリに既にプッシュされたコミットを元に戻すには?
$ git revert ab12cd15
編集:2015年01月09日
ローカルブランチとリモートブランチから以前のコミットを削除する
ケース: ローカルブランチに変更をコミットし、すぐにリモートブランチにプッシュした場合。 突然、ああ、この変更は必要ないことに気づきました。さて、どうしましょうか?
git reset --hard HEAD~1
[ローカルブランチからそのコミットを削除するため] です。
git push origin HEAD --force
[両方のコマンドを実行する必要があります。 リモートブランチから削除する場合]。
ブランチとは何ですか?現在チェックアウトされているブランチです。
2015/08/09編集 - ローカルの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 コミットコード - これはすべてのマージコミットが発生する前に存在していたものです] 。
解決方法は?
何を元に戻すか、何を元に戻すかによって異なります。まずは 宇部さんのリンク先の記事 . しかし、答えを試みるには
ハードリセット
git reset --hard [HEAD]
トラックされたファイルに対するすべてのステージングおよびアンステージされた変更を完全に削除します。
ハードリセットは、リモートから完全に再クローンしたときのように、すべてを取り消したいときによく使用します。あなたの場合、レポを無傷にしたいのであれば、これは有効でしょう。
クリーン
git clean [-f]
追跡されないファイルを削除します。
一時ファイルを削除するが、すでに追跡されているファイルへのステージングされた変更と未ステージ化の変更は維持する場合。例えば、C#プロジェクトのbin/objフォルダは、スペースを節約するために通常レポから除外したいとか、そういうことです。
また、-f (force)オプションは、追跡されていないファイル と は、無視ルールにもかかわらず git に無視されています。上の例では、bin/obj フォルダを無視するルールを設定した場合、これらのフォルダは git に無視されていますが、force オプションを使用するとファイルシステムからそれらを削除することができます。例えば、デプロイをスクリプトで行う際に、デプロイやzip圧縮などの前にコードをきれいにしたい場合などに、この使い方を散見することがあります。
Git clean は、すでに追跡されているファイルには手をつけません。
チェックアウト "dot"。
git checkout .
実はこの記法、あなたの投稿を読むまで見たことがなかったんです。これに関するドキュメントを見つけるのに苦労しているのですが(たぶん誰かが助けてくれるでしょう)、少し遊んでみたところ、どうやら意味はあるようです。
作業ツリー内のすべての変更を取り消します"。
つまり、トラックされたファイル内のステージされていない変更を元に戻すことです。どうやらステージングされた変更には触れず、未追跡のファイルだけを残すようです。
保管
いくつかの回答では、スタッシングについて触れています。この文言が示すように、おそらくスタッシングを使うのは、何かの途中(コミットの準備ができていない)で、一時的にブランチを切り替えたり、別の状態のコードで作業をして、後で" messy desk"に戻らなければならない時でしょう。これはあなたの質問には当てはまりませんが、間違いなく便利です。
まとめると
一般に、重要な変更をコミットしてリモートにプッシュした自信がある場合は、単に遊んでいるだけの場合などは
git reset --hard HEAD
に続いて
git clean -f
を実行すると、ブランチからクローンしてチェックアウトしたときの状態まで、コードを完全にクリーンアップすることができます。強調しておきたいのは、このリセットはステージされた、しかしコミットされていない変更も削除してしまうということです。
コミットされていないものはすべて消去されます。
(未追跡のファイルを除く、その場合は
クリーン
).
他のコマンドは、より複雑なシナリオを容易にするために用意されており、quot;undoing stuff"の粒度が必要です :)
1の質問はカバーされているように感じますが、最後に2について結論から言うと、あなたが
git reset --hard
は、あなたが何もステージングしていなかったからです。変更の演出をしたことがあれば
git checkout .
も
git clean -f
はそれを元に戻したのでしょう。
これでカバーできるといいのですが。
関連
-
[解決済み] Git で直近のローカルコミットを取り消すには?
-
[解決済み] Gitブランチをローカルやリモートで削除するには?
-
[解決済み] git pull」と「git fetch」の違いは何ですか?
-
[解決済み] コミット前に 'git add' を取り消すにはどうすればよいですか?
-
[解決済み] 現在のGit作業ツリーからローカル(未追跡)ファイルを削除する方法
-
[解決済み] まだプッシュされていない Git マージを元に戻す
-
[解決済み] Git のローカルコミットを破棄する
-
[解決済み】"git pull" でローカルファイルを強制的に上書きするには?
-
[解決済み】ローカルリポジトリのブランチをリセットして、リモートリポジトリのHEADと同じにする
-
[解決済み】ローカルのGitブランチの名前を変更するには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] 現在のブランチのトラッキング情報がありません。
-
git revert + git rebase 一度に複数のコミット_本然233的博客程式员息信网_git revert Multiple
-
[解決済み] リモートの <ブランチ名> とマージするように設定されていますが、そのような参照は取得されませんでしたか?
-
[解決済み] git: fatal: リモートリポジトリから読み取れませんでした。
-
[解決済み] エラーです。リベースを使用してプルできません。あなたはステージングされていない変更を持っています
-
[解決済み] 現在のGit作業ツリーからローカル(未追跡)ファイルを削除する方法
-
[解決済み] Git で、ステージされていない変更を破棄するにはどうしたらいいですか?
-
[解決済み] Git で管理されているプロジェクトのローカルな変更をすべて以前の状態に戻すにはどうすればよいですか?
-
[解決済み] Git のローカルコミットを破棄する
-
[解決済み] あるブランチに加えられたすべての変更を破棄するには?