gitはすべての変更を破棄し、上流からプルします


145

上流のレポをフェッチしてマスターを置き換えるにはどうすればよいですか?私のリポジトリにはマスターであるブランチが1つだけあり、それを完全にめちゃくちゃにしたので、基本的に上流からやり直す必要があります。initでうまくいくと思いますが、もっと簡単な方法はありますか?

回答:


251

ここでできることは(少なくとも)2つあります。リモートリポジトリを再クローンするかreset --hard、共通の祖先にプルしてからプルを実行すると、リモートマスターの最新のコミットに早送りされます。

具体的には、Nevik Rehnelの元の回答の簡単な拡張を次に示します。

git reset --hard origin/master
git pull origin master

:を使用git reset --hardすると、コミットされていない変更はすべて破棄されます。gitを初めて使用する場合は、このコマンドと混同しやすいので、先に進む前に、何が行われるかを理解しておいてください。


1
新人のためのより多くの助け:git gc片付けといくつかのハウスキーピングを介して実行されます。別のメモでは、私は走ったことがないgit gc。実行は便利ですが、必要ありません。
Joshua Dance 14

@JoshuaDance-良い点。なぜ最初に含めたのかわかりません。
エリックウォーカー

23

ブランチマスターで: git reset --hard origin/master

次に、いくつかのクリーンアップを行いますgit gc(これについては、manページで詳しく説明します)

更新:あなたはまた、おそらく行う必要がありますgit fetch origin(またはgit fetch origin master、あなたがいる場合のみ、そのブランチをしたいです)。リセットの前でも後でもかまいません。(@ eric-walkerに感謝)


1
の後でプルする必要があるかもしれませんreset --hard
Eric Walker

リセット前にgit fetch originを実行すると、マスターからのプルは不要になります。
sciritai

@sciritai:originからのフェッチについて言及する前に、私のコメントが追加されました。
エリックウォーカー

19

あなたは単一のコマンドでそれを行うことができます:

git fetch --all && git reset --hard origin/master

または、コマンドのペアで:

git fetch --all
git reset --hard origin/master

ローカルの変更はすべて失われることに注意してください


5
git reset <hash>  # you need to know the last good hash, so you can remove all your local commits

git fetch upstream
git checkout master
git merge upstream/master
git push origin master -f

ほら、今、あなたのフォークは上流と同じに戻っています。


0

私はようやく、の代わりにgit fetch --all && git reset --hard origin/masterであることに気づきgit fetch --all && git reset --hard origin/<branch_name>ました(別のブランチで作業している場合)

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