2011-04-11 2 views
14

J'ai raté un peu mon git repo. J'ai travaillé sur une fonctionnalité dans une branche séparée. Après avoir fini le travail, je suis passé au master pour le fusionner, mais mon partenaire a poussé quelques fichiers qui étaient en conflit avec le mien. Après la fusion, le conflit et en poussant les nouveaux changements, j'ai vu que j'ai commis les changements plus anciens de mon partenaire aussi.Annule la dernière validation/fusion

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?

+0

http://stackoverflow.com/questions/1377845/git-reset-hard-and-a-remote-repository – plaes

Répondre

5

Hehe, vous pensé presque dehors:

git reset --hard HEAD^ 
+1

Hey plaes merci pour la réponse, mais je veux garder la fichiers que j'ai poussés à tort. Y a-t-il une solution pour cela? –

+0

'git reset --soft' peut vous aider. – LaraChicharo

27

Votre branche fonction sera toujours pointer vers votre travail. Vous ne perdrez pas ces changements.

Comme plaes dit, vous pouvez maître réinitialisé un avec

git reset --hard HEAD^ 

Si vous souhaitez récupérer des fichiers spécifiques de votre branche sans la fusion, vous pouvez les consulter:

git checkout yourbranch -- file1 file2 etc 

Si vous voulez des fichiers de master d'avant la fusion, vous pouvez également les vérifier:

git checkout master^ -- file3 file4 etc 

Ce n'est pas idéal mais c'est ce qui est parfois nécessaire. Une fusion/peut/signifie que vous rejetez des modifications de chaque côté dans une fusion. La meilleure façon de parvenir à une fusion appropriée consiste à:

git merge --no-commit yourbranch 

du maître, puis exécutez les commandes git checkout de plus haut et enfin commettras:

git add . -A 
git commit 

Lorsque vous appuyez sur cette branche maintenant, vous aurez besoin d'ajouter l'option force

git push --force 

ou

git push -f 

Espérons que cela aide.

+0

Merci pour la réponse adymitruk, j'ai essayé le git 'reset --hard HEAD ^' et après git push origine + maître mais je reçois encore une erreur avec le message '![remote rejected] master -> master (hook pré-reçu refusé) ' –

+0

Si vous perdez un commit sur la télécommande à cause d'un push, vous devez dire à git que ça va avec' --force 'ou ' -f' option. Mise à jour de la réponse –

7

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, un git reset --hard/- soft/- mixed HEAD^aurait fait l'affaire. Ainsi, lorsque vous avez réinitialisé votre HEAD git se plaint lorsque vous essayez de pousser à l'origine et mettre à jour la télécommande qui n'est pas un ancêtre de votre tête. Utilisez --force:

git push --force origin master 
Questions connexes