ブランチに加えられたすべての変更を破棄する方法は?


116

私はブランチ(つまりdesign)で作業しており、いくつかの変更を加えましたが、それらをすべて破棄して、リポジトリのバージョンと一致するようにリセットする必要があります。私git checkout designはそれをやろうと思ったが、それは私がすでにブランチdesignにいて、3つの変更されたファイルがあることを告げるだけである。

これらの変更を破棄して、現在リモートサーバー上にあるブランチを取得するにはどうすればよいですか?

回答:


207

注:これは元に戻せません

git checkout -fこれを試して、すべてのブランチとマスターでコミットされていないローカル変更を破棄します。


86

git reset --hardは、最後のコミット以降すべてを破棄したい場合に役立ちます


6
またはgit reset --hard HEAD^
デッドフィッシュ2013

27
git reset --hard HEAD^本当に受け入れられる答えでなければなりません。OPは他のブランチについて質問していませんでした...
vphilipnyc

2
私はこれを試したところ、最後のコミットだけでなく、最後のプッシュ以降のすべてが削除されたと思います。
Chase Roberts

3
私はgit reset --hard HEAD ^を試しましたが、それでもまだ追跡されていないファイルがたくさん残っています。次に、1つの簡単なコマンドでそれらを削除する方法をググる。
John Deighan

20
git diff master > branch.diff
git apply --reverse branch.diff

これらの手順は、特定のブランチの状態をマスターブランチと同じになるように設定する場合に非常に役立ちます。これを行うには、特定のブランチ内からこれを実行し、git rm [branch name].diff
karolus

18

変更を望まdesign、リモートのブランチと完全に一致させたい場合は、ブランチを削除して再作成することもできます。

# Switch to some branch other than design
$ git br -D design
$ git co -b design origin/design            # Will set up design to track origin's design branch

7
また:git checkout design; git reset --hard origin / design
Dan

ブランチを削除する前にもコミットします
Asarluhi '17 / 11/17

リモートにないローカルブランチのコミットがある場合、これは私の意見では本当に混乱する状況になるためのレシピです。私は間違いなくこのソリューションを使用しません
erewok

1
@erewok:さて、質問は、質問者がすべての変更を破棄したいと具体的に言っています。
mipadi

そして、私はこの答えがそれを達成するとは思いません。
erewok

7

@ Will、git immersionは本当に素晴らしくシンプルなgitチュートリアルです。ステージングされていない、ステージングされている、コミットされている場合の変更を元に戻す方法を示します。ラボ14-18


2
1年以上後にgitのイマージョンが完了したと言いたいだけです。OI!私は...そんなに早くこれを行っている必要があります
ウィル

1
これはRubyインストールする必要があります。これは常に選択できるとは限りません
Vishnu

5

ローカルブランチの変更を破棄する場合は、git stashコマンドを使用してこれらの変更を隠しておくことができます。

git stash save "some_name"

変更は保存され、必要に応じて後で取得したり、削除したりできます。これを実行すると、ブランチにはコミットされていないコードがなくなり、git pullを使用してメインブランチから最新のコードをプルできます。



0

すべての変更を破棄するREVERSIBLEメソッド:

マージを行った後、すぐにチェックアウトの開発を忘れた後、この質問を見つけました。あなたはそれを推測しました:私は直接masterでいくつかのファイルを変更し始めました。ドー!私の状況はほとんど一意ではないので(私たち全員がそうしましたね;->)、すべての変更を破棄して、マスター再び開発しているように見せるために使用した可逆的な方法を提供します。

やった後にgit diffファイルが変更されたものを見ると、私の誤差の範囲を評価するために、私が実行しました:

git stash
git stash clear

すべての変更を最初に隠した後、それらは次にクリアされました。マスターへのエラーのあるファイルに加えられたすべての変更が失われ、パリティが復元されました。

これらの変更を復元したいとします。私がすることができます。最初のステップは、私がクリア/ドロップしたスタッシュのハッシュを見つけることです:

git fsck --no-reflog | awk '/dangling commit/ {print $3}'

ハッシュを学習した後、私はコミットされていない変更を正常に復元しました:

git stash apply hash-of-cleared-stash

これらの変更を本当に復元したくなかったので、元に戻せることを確認したかったので、もう一度クリアしました。

別のオプションは、変更を消去するのではなく、スタッシュを別のブランチ適用することです。したがって、間違ったブランチでの作業から加えられた変更をクリアするという点でstashは、ブーブーから回復するための多くの柔軟性が得られます。

とにかく、ブランチへの変更をクリアするリバーシブルな手段が必要な場合、前述の方法はこのユースケースではそれほど危険ではありません。


-1

git checkout -f

これはあなたの質問には十分です。唯一のことは、一度行われると、行われることです。元に戻すことはできません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.