Git tire dans la mauvaise twig

Un autre développeur et moi-même avions fusionné et poussé notre travail vers une twig non maîtresse appelée toolwork. De cette façon, nous n’avons pas eu d’impact sur le rest de l’équipe. Ma twig de sujet s’appelait DPM-93 et ​​mon stream de travail é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 

Cela fonctionnait très bien jusqu’à ce que j’ai accidentellement émis ces commandes git

 git checkout toolwork git pull origin master 

À ce moment-là, un tas de nouvelles choses sont apparues dans les outils de twig et je ne suis pas sûr de savoir comment le supprimer sans supprimer mon espace de travail et le re-clonage à partir du repository.

Y a-t-il un moyen de remettre cela à l’état avant le tirage?

 git reset --hard ORIG_HEAD 

À partir de la page de manuel de git reset (si vous venez de faire le pull):

Annuler une fusion ou tirer

 $ 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 en amont a provoqué beaucoup de conflits; vous n’étiez pas prêt à passer beaucoup de temps à fusionner maintenant, alors vous décidez de le faire plus tard.
  2. pull ” n’a pas fait de commit de fusion, donc ” git reset --hard ” qui est synonyme de ” git reset --hard HEAD ” efface le désordre du fichier d’index et de l’arborescence de travail.
  3. Fusionnez une twig de rubrique dans la twig en cours, ce qui a entraîné une accélération.
  4. Mais vous avez décidé que la twig thématique n’est pas encore prête pour la consommation publique.
    “pull” ou “merge” laisse toujours la pointe d’origine de la twig actuelle dans ORIG_HEAD , donc la réinitialisation ORIG_HEAD ramène votre fichier d’index et l’arborescence de travail à cet état et réinitialise la pointe de la twig à cette validation.

Voir HEAD et ORIG_HEAD pour plus d’informations.

Réinitialiser la twig principale:

 git reset --hard origin/master 

Vous pouvez utiliser git log pour trouver le SHA-1 de la révision que vous souhaitez toolwork tête de votre twig d’ toolwork , puis utiliser git reset --hard pour rétablir votre copie de travail dans cette révision.

Tout sauvegarder en premier! Et relisez la page de manuel pour git reset pour vous assurer qu’elle fait ce que vous voulez.

EDIT: Oh oui, ORIG_HEAD devrait contenir le droit SHA-1. Mais vérifiez d’abord.

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

En supposant que l’état de la twig d’ toolwork laquelle vous voulez revenir a été poussé à l’ 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 twig différente et, ce faisant, je n’avais pas à me soucier de la recherche de la validation correcte dans le journal.

Ce qui a fonctionné pour moi est simplement

git reset --hard

Je l’ai fait depuis le repository local avec la fusion / extraction 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) $