83

Myself and one other developer had been merging and pushing our work to a non-master branch called toolwork. That way, we didn't impact the rest of the team. My topic branch was called DPM-93 and my git workflow was this.

# do some work
git checkout DPM-93
git commit -m "did some work"

# catch up
git checkout toolwork
git pull origin toolwork

# rebase my topic branch
git checkout DPM-93
git rebase toolwork

# merge and push my changes
git checkout toolwork
git merge --no-ff DPM-93
git push origin toolwork

That was mostly working fine until I accidently issued these git commands

git checkout toolwork
git pull origin master

At that point, a bunch of new stuff showed up in branch toolwork and I'm not sure how to get rid of it short of deleting my workspace and re-cloning from the repo.

Is there any way to back this out to the state before the pull?

4

7 に答える 7

117
git reset --hard ORIG_HEAD 

git resetマニュアルページから(プルを実行した場合):

マージまたはプルを元に戻す

$ 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)
  1. アップストリームから更新しようとすると、多くの競合が発生しました。現在、マージに多くの時間を費やす準備ができていなかったため、後でマージすることにしました。
  2. pull」はマージコミットを行っていないため、「git reset --hard」の同義語である「git reset --hard HEAD」は、インデックスファイルと作業ツリーから混乱を取り除きます。
  3. トピックブランチを現在のブランチにマージします。これにより、早送りが行われました。
  4. しかし、あなたはトピックブランチがまだ一般消費の準備ができていないと判断しました。
    「pull」または「merge」は常に現在のブランチの元のチップをORIG_HEADそのままにしておくため、ハードにリセットするとインデックスファイルと作業ツリーがその状態に戻り、ブランチのチップがそのコミットにリセットされます。

詳細については、を参照HEADORIG_HEADてください。

于 2010-10-22T16:31:55.857 に答える
90

マスターブランチをリセットします。

git reset --hard origin/master
于 2011-09-22T22:53:08.770 に答える
11

を使用して、ブランチgit logの先頭にしたいリビジョンのSHA-1を見つけてから、を使用して作業コピーをそのリビジョンに戻すことができます。toolworkgit reset --hard <SHA1>

最初にすべてをバックアップしてください!そして、manページをgit reset読み直して、希望どおりに動作していることを確認してください。

編集:そうです、ORIG_HEADには正しいSHA-1が含まれている必要があります。ただし、最初に確認してください。

于 2010-10-22T16:29:57.560 に答える
7

私は最近同様のことをし、この答えに基づいたより簡単な解決策を使用しました。

toolwork元に戻したいブランチの状態がにプッシュされていると仮定すると、次のoriginように簡単に実行できます。

git fetch origin
git reset --hard origin/toolwork

私の場合、の値はORIG_HEAD別のブランチでの別のマージによって上書きされていたので、これを行うことで、ログで正しいコミットを検索することを心配する必要はありませんでした。

于 2015-11-23T02:49:40.273 に答える
2

私のために働いたのは単純です

git reset --hard

残念ながら、マージ/プルを使用してローカルリポジトリからこれを実行しました。

Laptop@LAPTOP-xxxxxxxx /d/Google Drive/xxxxxxx/Github/xxxxx (staging_ec2|MERGING)
$ git reset --hard
HEAD is now at 2d5a511 [last commit comment]

Laptop@LAPTOP-xxxxxxxx /d/Google Drive/xxxxxxx/Github/xxxxx (staging_ec2)
$
于 2018-05-16T14:04:07.810 に答える
1

ステップ1:

git log

git reset --hard <hash>, 
  

ハッシュは次のようなものです0928817nsbn78867hs3g5666

例:の場合git log、次のようになります。

commit 0928817nsbn78867hs3g5666 (HEAD -> yourrepo, origin/yourrepo)

ステップ2:

git reset --hard 0928817nsbn78867hs3g5666

于 2021-04-15T13:53:04.753 に答える
0

以下のコマンドを使用して、そのマージを中止できます

git merge --abort

偶発的な引っ張りを元に戻すだけです...

于 2020-03-25T12:25:17.103 に答える