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?
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)
- 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.
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.- fusionner une branche thématique dans la branche actuelle, ce qui a abouti à une progression rapide.
- 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 dansORIG_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.
réinitialiser la branche principale:
git reset --hard origin/master
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.
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.
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)
$