git pullを元に戻すには?


238

リモートオリジンでの不要なコミットのためにgit pull onを取り消したいのですが、どのリビジョンにリセットする必要があるのか​​わかりません。

リモートオリジンでgit pullする前の状態に戻すにはどうすればよいですか?


4
補足:git fetch upstream最初に役立つと思うかもしれません。次にgit diff upstream/branch何をマージするかをざっと見てみてください。問題がなければ、続行してくださいgit merge upstream/branch
Shahbaz

1
流行に敏感なブログラム作成者がGUIからgitコマンドを実行していることがわかると、ストリートクレデンシャルはすべて失われ、1週間分の給与がドッキングされますが、GitHubデスクトップAtomには、undoファイルを簡単かつ明確にステージングおよびステージング解除するためのコミットおよびチェックボックスへの安全で簡単なボタンがあります。GUIも人です!
Dem Pilafian

回答:


391

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

git pull 

おっと?

git reset --keep HEAD@{1}

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


コメント者へ

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


2
HEAD @ {1}とHEAD ^の違いは何ですか?
hugemeow

7
@hugemeowそれはすばらしいSO質問でしょう。一方man git-rev-parse、これについて説明します。HEAD@{1}シンボリック以前の値であるHEADreflog一方がHEAD^(第一)である親リビジョン電流HEAD。これら2つは同等である必要があります(たとえば、リベース、ハードリセット、ブランチスイッチなどの後)。reflogのリンクされた記事を読んでください。乾杯
sehe

10
PowerShellのユーザーが、バッククォートと括弧をエスケープ:git reset HEAD@`{1`}
ロバート・クレイプール

3
ss64.com/ps/syntax-esc.htmlと入力したかったと思いますHEAD@`{1`}。あるいは、POSIXシェルでも機能するものを実行してください。'HEAD@{1}'
sehe

2
プルをリセットするだけでなく、コミット=(
falsarella

67

git reflog showHEADの履歴が表示されます。これを使用して、以前の場所を把握できますpull。次に、そのコミットを実行できresetますHEAD


git reflog showが次の出力を生成しました:c9e5e4d HEAD @ {0}:pull:早送り1c86a22 HEAD @ {1}:pull originマスター:早送り05c141a HEAD @ {2}:pull:早送りHEADをHEADに安全にリセットできますか@ {1}
Kartins、2011

seheによるもう1つの答えは、そこに到達する方法の詳細です。
Noufal Ibrahim

これは、悲惨なコミットが何らかの形でマージコミットを私の履歴に散在させた後、非常に役に立ちました。reflogで最後に既知の商品を探して強制的にプッシュすることで、それらを入手しました。
Domenic

どのような場合はpull最初のアクションはありますか?pullがでHEAD@{1}、それより前に何もない場合、どうすればその前の状態に戻すことができますか?
ヘンドラウジア2013

リポジトリを再作成しますか?
Noufal Ibrahim 2013

29

これでうまくいきました。

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)

これをチェックアウト:HEADとORIG_HEADをGitの中でより多くのために。


17

<SHA#>行きたいコミットを見つけます。あなたはそれをgithubで見つけるgit loggit reflog show、コマンドラインで入力するか、それから行うことができます git reset --hard <SHA#>


何をコミットするのか?
マーティン

すみません、修正しました <SHA#>
Nina、

これは、元に戻す必要があるときに最もよく使用するコマンドです
Kartins

2

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/621690も参照してください


ありがとう!あなたは私の日を救った
チアゴマーティンズ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.