web-dev-qa-db-ja.com

git pullを元に戻す方法は?

リモートOrigin上の不要なコミットのためにgit pullを元に戻したいのですが、どのリビジョンにリセットしなければならないのかわかりません。

Gitがリモートの原点を引っ張る前の状態に戻るにはどうすればいいですか?

213
Kartins

または他の答えよりも明確にするために:

git pull 

おっ?

git reset --keep HEAD@{1}

1.7.1より古いバージョンのgitには--keepがありません。そのようなバージョンを使用する場合、--hardを使用することができます - しかしそれはローカルの変更を失うので危険な操作です。


コメンターへ

ORIG_HEADは以前のHEADの状態であり、元に戻すのが簡単なように、危険な動作をする可能性のあるコマンドによって設定されます。 HEAD @ {1}はORIG_HEADとほぼ同等です(HEAD @ {1}は常にHEADの最後の値、ORIG_HEADは危険な操作の前のHEADの最後の値です)

349
sehe

git reflog showはあなたにHEADの歴史を示すべきです。これを使用して、pullの前にいた場所を特定できます。それから、そのコミットにあなたのresetHEADできます。

59
Noufal Ibrahim

これは私のために働きました。

git reset --hard ORIG_HEAD 

マージを元に戻すかプルします。

$ git pull                         (1)
Auto-merging nitfol
CONFLICT (content): Merge conflict in nitfol
Automatic merge failed; fix conflicts and then commit the result.
$ git reset --hard                 (2)
$ git pull . topic/branch          (3)
Updating from 41223... to 13134...
Fast-forward
$ git reset --hard ORIG_HEAD       (4)

これをチェックしてください: GitのHEADとORIG_HEAD 詳細は==。

実行したいコミットの<SHA#>を見つけます。あなたはgithubでそれを見つけるか、コマンドラインでgit logまたはgit reflog showをタイプしてそれからgit reset --hard <SHA#>をすることによってそれを見つけることができます

15
Nina

から https://git-scm.com/docs/git-reset#Documentation/git-reset.txt-Undoamergeorpullinsideadirtyworkingtree

マージを元に戻す、または汚れた作業ツリーの中を引っ張る

$ git pull           (1)
Auto-merging nitfol
Merge made by recursive.
 nitfol               |   20 +++++----
 ...
$ git reset --merge ORIG_HEAD      (2)

作業ツリーにローカルの変更があっても、他のブランチの変更がそれらと重ならないことを知っていればgit pullと言っても問題ありません。

マージの結果を調べたところ、他のブランチの変更が不十分であることがわかります。 git reset --hard ORIG_HEADを実行すると、元の場所に戻ることができますが、ローカルの変更は破棄されます。これは不要です。 git reset --mergeはあなたのローカルな変更を保持します。

また参照してください https://stackoverflow.com/a/30345382/62169

0
Risadinha