web-dev-qa-db-ja.com

Gitが間違ったブランチにプルする

私自身と他の1人の開発者は、ツールワークと呼ばれる非マスターブランチに作業をマージしてプッシュしていました。そのようにして、チームの残りの部分に影響を与えませんでした。私のトピックブランチはDPM-93と呼ばれ、私のgitワークフローはこれでした。

# 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

これらのgitコマンドを誤って発行するまで、それはほとんど正常に機能していました

git checkout toolwork
git pull Origin master

その時点で、ブランチツールワークに大量の新しいものが現れました。ワークスペースを削除してレポジトリから再度クローンを作成する以外に、それを取り除く方法がわかりません。

これをプル前の状態に戻す方法はありますか?

66
milkplus
git reset --hard ORIG_HEAD 

git reset manページ から(プルを行った場合):

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

$ 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に残すため、ハードにリセットしますインデックスファイルと作業ツリーをその状態に戻し、ブランチの先端をそのコミットにリセットします。

詳細については、 HEADおよびORIG_HEAD を参照してください。

96
VonC

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

git reset --hard Origin/master
68
Homero Barbosa

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

最初にすべてをバックアップしてください!そして、git resetのmanページを読み直して、あなたが望むことをしていることを確認してください。

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

9
Cameron Skinner

私は最近同様のことを行い、 この答え に基づいたよりシンプルなソリューションを使用しました。

に戻したいtoolworkブランチの状態がOriginにプッシュされたと仮定すると、単にやる

git fetch Origin
git reset --hard Origin/toolwork

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

4
zelanix

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

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)
$
0
ssaltman