web-dev-qa-db-fra.com

Annuler la dernière validation / fusion

J'ai un peu gâché mon git repo. J'ai travaillé sur une fonctionnalité dans une branche distincte. Après avoir terminé le travail, je suis passé au maître pour le fusionner, mais mon partenaire a poussé quelques fichiers qui entraient en conflit avec le mien. Après la fusion, le conflit et pousser les nouveaux changements, j'ai vu que j'engagé les changements plus anciens de mon partenaire aussi.

Maintenant, je veux refaire cette validation/fusion. J'ai essayé git reset --soft HEAD^ mais quand j'ai voulu pousser, j'ai reçu ce message d'erreur Merge the remote changes before pushing again.

Quelqu'un peut-il m'aider?

27
Siggy Petersen

Votre branche de fonctionnalité pointera toujours vers votre travail. Vous ne perdrez pas ces modifications.

Comme l'a dit Plaes, vous pouvez réinitialiser

git reset --hard HEAD^

Si vous souhaitez récupérer certains fichiers spécifiques de votre branche sans les fusionner, vous pouvez les consulter:

git checkout yourbranch -- file1 file2 etc

Si vous voulez des fichiers du maître avant la fusion, vous pouvez également les vérifier:

git checkout master^ -- file3 file4 etc

Ce n'est pas l'idéal mais c'est ce qu'il faut parfois. Une fusion/peut/signifie que vous rejetez certaines modifications des deux côtés dans une fusion. La meilleure façon de réaliser une fusion appropriée est de:

git merge --no-commit yourbranch

du maître, puis exécutez les commandes git checkout d'en haut et enfin validez:

git add . -A
git commit

Lorsque vous poussez cette branche maintenant, vous devrez ajouter l'option force

git Push --force

ou

git Push -f

J'espère que cela t'aides.

36
Adam Dymitruk

Hehe, tu l'as presque compris:

git reset --hard HEAD^
10
plaes

Le problème ici est que vous souhaitez annuler les modifications que vous avez déjà apportées au référentiel central. Si vous ne les aviez pas poussés en premier lieu, une réinitialisation de git --hard/- soft/- HEAD ^ mixte aurait fait l'affaire.

Ainsi, lorsque vous avez réinitialisé votre HEAD git se plaint lorsque vous essayez de pousser vers l'origine et de mettre à jour la référence distante qui n'est pas un ancêtre de votre HEAD. Utilisez --force:

git Push --force Origin master
10
ralphtheninja