Git pull dans la mauvaise branche

un autre développeur et moi-même avions fusionné et poussé notre travail vers une branche non-maître appelée toolwork. De cette façon, nous n'avons pas d'impact sur le reste de l'équipe. Ma branche s'appelait DPM-93 et mon workflow git était celui-ci.

# 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

qui fonctionnait plutôt bien jusqu'à ce que j'émette accidentellement ces git commandes

git checkout toolwork
git pull origin master

à ce moment-là, un tas de nouvelles choses ont fait leur apparition dans la fabrication d'outils de branche et je ne suis pas sûr de savoir comment s'en débarrasser à part supprimer mon espace de travail et re-cloner du rapport.

Est-il possible de revenir à l'état avant le tirage?

57
demandé sur milkplus 2010-10-22 20:26:26

5 réponses

git reset --hard ORIG_HEAD 

De la git reset l'homme page (si vous venez de faire l'attraction):

annuler une fusion ou une traction

$ 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. essayer de mettre à jour à partir de l'amont a donné lieu à beaucoup de conflits; vous n'étiez pas prêt à passer beaucoup de temps à fusionner en ce moment, donc vous décidez de le faire plus tard.
  2. pull "n'a pas fait fusionner commettre, donc " git reset --hard " qui est un synonyme de " git reset --hard HEAD " efface le désordre le fichier d'index et de l'arbre de travail.
  3. fusionner une branche thématique dans la branche actuelle, ce qui a abouti à une progression rapide.
  4. mais vous avez décidé que la branche sujet n'est pas encore prête pour la consommation publique.

    "pull" ou "merge" sort toujours de la pointe originale de la branche courante dans ORIG_HEAD , donc la réinitialisation dure apporte votre fichier d'index et l'arbre de travail retour à cet état, et réinitialise le bout de la branche qui s'engagent.

voir HEAD et ORIG_HEAD pour plus.

88
répondu VonC 2017-05-23 10:31:16

réinitialiser la branche principale:

git reset --hard origin/master
52
répondu Homero Barbosa 2017-03-15 03:16:05

vous pouvez utiliser git log pour trouver le SHA-1 de la révision que vous voulez être à la tête de votre branche toolwork , puis utiliser git reset --hard <SHA1> pour retourner votre copie de travail à cette révision.

sauvegardez tout d'abord! Et relisez la page de manuel de git reset pour être sûr qu'il fait ce que vous voulez.

EDIT: Ah oui, ORIG_HEAD doit contenir le droit de SHA-1. Mais vérifiez d'abord.

9
répondu Cameron Skinner 2010-10-22 16:29:57

j'ai fait une chose similaire récemment, et utilisé une solution plus simple basée sur cette réponse .

en Supposant que l'état de la toolwork branche que vous voulez revenir à a été poussé à origin , vous pouvez simplement faire

git fetch origin
git reset --hard origin/toolwork

dans mon cas, la valeur de ORIG_HEAD avait été écrasée par une autre fusion sur une branche différente, et en faisant cela je n'avais pas à m'inquiéter recherche de la propagation correcte dans le journal.

4
répondu zelanix 2017-05-23 12:18:19

ce qui a fonctionné pour moi est tout simplement

git reset --hard

j'ai fait cela depuis le dépôt local avec la fusion/traction malheureuse:

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
répondu ssaltman 2018-05-16 14:04:07