2010-10-26 6 views
2

Je travaille dans un environnement git multi-utilisateur. Mon flux de travail est de travailler dans une branche, et de tirer de la télécommande dans le maître local, puis rebaser ma branche de travail, fusionner la branche avec le maître local, puis pousser vers le repo distant.Git en conflit commet

Dans le plus récent pull il ya 6 nouveaux commits, l'un d'entre eux mon code doit avoir préséance sur.

Si je rebase, je vais devoir résoudre plusieurs conflits, puis remplacer les objets existants par les miens. Je peux le faire, mais il semble assez manuel, et implorer des problèmes.

Quelle est la meilleure façon de gérer cela?

Répondre

2

Vous pouvez git revert la mauvaise commettras dans la branche principale, puis rebasage à votre branche sujet:

git checkout master 
git revert <sha1> 
git rebase master topic 
+0

Small nitpick: Vous pouvez raccourcir les deux dernières commandes 'git' dans' git rebase master topic'. –

+0

@Frerich fixe, merci! –

+0

Merci Gabe et Français, je pense que c'est exactement ce que je cherchais mais je ne pouvais pas comprendre pourquoi. Semble parfaitement clair et exactement ce que j'essayais de faire. –

0

Je ne suis pas sûr qu'il existe un meilleur moyen. Si deux commet un conflit, vous devez dire à git comment le résoudre.

Votre question suggère que c'est un peu plus grand que cela, cependant. Il semble que vous ayez fait "framework A avec l'objet support B" et que la ligne principale ait fait "framework C avec l'objet support D" et que vous vouliez annuler C & D en faveur de A & B. Est-ce correct?

Si oui, alors vous êtes toujours coincé avec le même problème: vous devez décider quoi dire à git. Si le nouveau code a supplanté l'ancien code, alors git ne peut le savoir que si vous le lui dites. En fin de compte, vous devrez soit rebaser ou fusionner et les deux auront le même ensemble de conflits.

+0

Oui, que résume assez bien, j'espérais que je pouvais tirer de l'infraction allouent, fusionner mes changements, puis tirer le reste, plutôt que le porte à porte de combat que je regarde. –

+0

Vous pouvez (un peu) faire cela ... vous pouvez tirer les commits un par un et les corriger au fur et à mesure plutôt que de faire un gros pull-and-merge. Rebase le fera effectivement, mais il fusionnera * votre * commet un par un plutôt que les principaux. –

+0

Après avoir lu l'autre réponse je vois que j'ai mal compris: il n'était pas clair que vous vouliez * complètement * rejeter un commit principal. Dans ce cas, «revenir» est le chemin à parcourir. –