Git:分岐したローカルブランチのすべての変更を破棄する


117

リモートブランチを追跡するローカルトピックブランチがあります。議論のために、コミット履歴が次のようになっているとしましょう:

A--B--C--O1--O2--O3 (origin/phobos)
       \
         L1--L2--L3 (phobos)

相対コミット履歴を確認したので、ローカルphobosブランチへのすべての変更を破棄し、それをの直接コピーに戻したいorigin/phobosので、ローカル履歴は次のようになります。

A--B--C--O1--O2--O3 (phobos origin/phobos)

phobosブランチへのローカルな変更を本当に望んでおらず、後でマージをレポジトリに表示したくないのです。(つまり、マージすることだけは私が考えていることではありません。)

これは簡単なはずですが、google-fuで失敗しました。どうすればよいですか?

回答:


79

ブランチを削除してから再作成します。

$ git branch -D phobos
$ git checkout --track -b phobos origin/phobos

37
このアプローチとブランチのヘッドのリセットの問題は、ブランチを削除するとブランチのreflogが消えてしまうことです。一方、ブランチをリセットすると、reflogが保持されるだけでなく、実際にリセットがreflogに記録されます。これにより、後で必要に応じて操作を簡単に元に戻すことができます。
Dan Molding

9
@Electrons_Ahoyここで受け入れられた回答をDanの回答に変更することをお勧めします(これを行う方法をGoogleで作成した私のような人々は、より安全な方法を選択する可能性があるためです)。
Steve Chambers、

4
@DanMouldingの答えには、不要なローカルブランチの削除は含まれていません。それははるかに安全です。
brma 14年

@brma:どうですか?それはまだ新しいコミットへのブランチを指しているだけです。
mipadi 14年

5
ダンモールディングの答えはより安全です。あなたはそれを選ぶべきだと思います。
Daniel Apt

330
git checkout phobos
git reset --hard origin/phobos

これは、Gitにのヘッドをphobosと同じコミットにリセットし、origin/phobos一致するように作業ツリーを更新するように指示します。


35
IMOこれは受け入れられる答えです。削除/再作成して手術を行う代わりに、「リセット」コマンドを発行してブランチポインターを移植します。
vdboor

実際、私は最初にこれを試してみましたが、ローカルコピーによるエラーがほとんど発生せず、ほとんど使用できませんでした。削除/再作成は洗練されていない可能性がありますが、フォローアップの質問をする必要はありませんでした。
Electrons_Ahoy

3
@Electrons_Ahoy:うーん、それは間違いなく正常ではありません。リポジトリが正常に機能していれば、通常、このリセットを実行しても問題のない操作になります。
Dan Molding

またはそれがほのめかしているとしても。実際にコマンドを読み取らずにこのコマンドを「誤って」発行した場合は、git reflogを使用して帰路を見つけます。 :)
dbn '19

また、ブランチにいてローカルで台無しにした場合にもこれは機能します。
スロット、2014
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.