Git: Comment faire pour annuler une fusion
La situation:
En commençant par le Maître de A
j'ai bifurqué et apporté quelques modifications à B
ensuite fusionnés qui branche dans (C)
. Après avoir fait quelques modifications plus j'étais à D
mais j'ai trouvé que j'nécessaires pour déployer le code sans les modifications qui s'est passé dans la branche. Si je part pas fusionné avec ce qui aurait été bien.
A_______C___D
\ /
\_B_/
Tout d'abord j'aimerais savoir ce que j'aurais fait à partir d'ici pour déployer le code comme si la fusion n'est jamais arrivé. Remarque: aucun des même les fichiers qui ont été modifiés dans la branche ont été édités dans le maître.
Deuxièmement...
Je n'ai pas eu le temps de travailler sur la meilleure méthode pour faire face à cela, donc j'ai supprimé les fichiers dont la direction générale ajoutée, et à la main est revenue quelques modifications apportées à la branche, puis engage le résultat pour le déploiement (F
)
A_______C___D___F
\ /
\_B_/
Je veux être en mesure de suivre le développement de la branche et de fusionner les modifications du maître afin de le maintenir à jour, mais si je ne fais que ce que j'ai fait pour créer F
seront fusionnés dans et la cause de la suppression des fichiers et les modifications apportées à être annulées. Quelle est la meilleure façon de traiter ce problème?
OriginalL'auteur Jake | 2010-12-14
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser git rebase pour le faire en une seule étape:
Je viens de tester ce, avec des résultats appropriés:
À partir d'ici vous avez la situation que vous avez décrite.
Alors:
rebases s'engage à partir de C (exclu) à master, sur A.
J'avais besoin de résoudre certains conflits, étant donné que j'ai modifié à la même place dans B et D, mais je pense que vous ne serez pas.
Doc sur
git rebase --onto
, qui est plus ou moins votre situation:http://git-scm.com/docs/git-rebase
Si vous avez eu:
alors vous avez maintenant:
À partir d'ici, la fusion des changements en maître dans la branche est facile. Jetez le commettre
F'
tout à fait.Après la commande ci-dessus, vous avez:
De fusionner les mises à jour de maître en the_branch:
... et résoudre les conflits.
OriginalL'auteur Gauthier
La solution évidente est de remettre à
A
, réappliquer tous les patchs manuellement et à résoudre les conflits (que vous n'aurez pas).Alternativement, vous pouvez simplement
git revert
patchB
mais qui permettra de créer un nouveau commit.Bien que Gauthier réponse est mieux.
Avez-vous vraiment cherry-pick F? Je pensais que F est seulement à l'inverse de B et de C, de sorte qu'il n'avait rien à faire après C'?
Désolé, maintenant, je ne suis pas sûr. Peut-être que je l'ai fait mais n'a pas vraiment besoin.
OriginalL'auteur terminus