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?
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.
Hehe, tu l'as presque compris:
git reset --hard HEAD^
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