J'ai un problème avec Rebasing de Master sur une branche "Déployer" dans l'un de mes référentiels.
Mon repo est configuré comme suit: p> Généralement mon flux de travail est: p> Le problème que j'ai maintenant, c'est que lorsque j'exécute Ce que j'ai trouvé 'fonctionne "fonctionne" Code> Git Rebase maître --interactive code>, nettoyage de la liste de sélection (il y a 5 ou donc «commet-commits» mais avec des numéros de référence différents (même message) dans cette liste, je vais donc choisir l'un d'entre eux) et ensuite faire manuellement la fusion. Une fois que j'ai fait cela pour chaque commit, je peux continuer la Rebase et tout ce joyeux ... P> jusqu'à la prochaine fois que je dois effectuer une boîte debase. P> Est-ce que quelqu'un sache que pourrait être heureux? Le projet n'est pas vraiment "secret", donc si besoin d'être je peux poster des messages, des journaux, des graphiques de branchement, etc. p> merci p> p> P>
Déployer code> Branche Li>
Git Rebase maître code> de la branche de déploiement - ceci utilisé pour fonctionner sans problème li>
capuchon déployé code> li>
git rebast maître code> sur la branche de déploiement, il appartient à une erreur de fusion / manualisation 3 voies requise (i Don 't pense que le message d'erreur est suffisamment générique pour poster). Git me dit d'effectuer une fusion, puis utilisez
git rebase --Continue code> pour terminer - ce qui ne fonctionne jamais. P>
3 Réponses :
Vous pouvez définir un attribut dans le répertoire parent de vos fichiers "spécifiques à un déploiement" , afin de toujours sélectionner le contenu de la branche de déploiement en cas de fusion. P>
Pour un exemple de gestionnaire de fusion, voir Cela répond donc . p>
Autre Stratégies ont été discutées , mais la clé reste: considérez toujours une fusion comme «une fusion à l'échelle du projet» et non une fusion basée sur un fichier. D'où les attributs pour affiner cette fusion à l'échelle du projet lorsqu'il s'agit de fichiers "spéciaux". P>
Pour obtenir Avant de tenter votre rebasage (ou après l'abandon d'une problématique), consultez Les commits que vous laissez tomber en supprimant les « pick » dans les lignes git rebase --continue code> vous devez travailler fusionner réellement les fichiers en conflit (les modifier, choisir les pièces que vous voulez à partir entre les marqueurs de conflit « <<<<<<< » , « ======= », « >>>>>>> ») puis
git add code> les à l'indice (l'indice est l'endroit où ils sont enregistrés comme conflictuel, l'ajout d'un fichier efface son état en conflit). Vérifiez la diff actuelle avec
git diff --cached code>, puis
git rebase --continue code> si elle ressemble à droite. P>
log git -p master..deploy code> pour afficher les commits que vous essayez de rebasage. Il est l'un de ceux-ci qui est en conflit avec tout ce que vous avez dans maître em>. P>
git rebase -i code> peut-être pas exactement la même chose (même si elles ont le même « sujet » dans leur message de commit). Le fait que vous pensez qu'il ne devrait y avoir un d'entre eux indique que fishy quelque chose qui se passe avec votre deploy em> branche. Sont ces commits « double » à la pointe de deploy em> ou y at-il d'autres commits après eux? Peut-être voir le contenu de ces commits « » fishy (
log -p code>, ci-dessus) vous donnera un indice quant à leur source. p>
Ce que vous ressemblez peut-être, c'est que vous avez changé l'historique de validation de ces commets "répétés" comme ils ont une SHA1 différente. Chaque SHA1 est unique pour non seulement le commit, mais également l'histoire de la validation. Par conséquent, il est impossible (bien, de manière extrêmement imprable de se produire pendant la durée de vie de l'univers), d'avoir deux Sha1 identiques dans la même histoire ou d'avoir deux SHA1 dans deux histoires différentes, même. Si vous changez quoi que ce soit dans votre commit, par exemple avec une modification ou une boîte interactive, vous allez changer le SHA1. Donc, deux commits qui pourraient ressembler à la même chose, sont réellement traités différemment.
Si très probable, vous avez reculé de l'autre branche, a fait un type de rebas interactif ou modifié les commits, a continué de commettre un autre code qui a modifié la même partie du code, puis sur le prochain rebas que vous avez des conflits, car les engagements que vous avez dans votre succursale locale qui diffèrent de la succursale que vous redimensionnez de la succursale, l'amont est tiré dans ce commettre que vous avez déjà tiré. dans et changé le SHA1 de, puis lorsque les commits sont rejoués sur la succursale, vous vous retrouvez avec un conflit car l'état du code a changé de ce que la validation était attendue parce qu'elle était originale créée à partir d'une histoire différente de celle que vous avoir sur votre branche. Wow, c'était une longue phrase ... p>
Lorsque vous "nettoyer" la liste de sélection ... Ce que vous faites est probablement en supprimant ces engagements répétés avant de rebaisser, alors maintenant que vous n'êtes donc pas réappliquer des modifications déjà appliquées, donc plus de conflits de conflits. P>
Cependant, si vous vouliez simplement résoudre les conflits pendant la Rebase, ce serait probablement le meilleur pari afin que vous ne supprimiez pas de manière accidentelle. que tu veux. La résolution des conflits rendra le changement de modification de ce commettre une différence d'une application applicable à l'histoire que vous avez. Une fois que vous appuyez sur cette résolution de conflit de fusion, vous ne devriez plus voir les problèmes à moins que vous ne modifiez pas les engageurs qui ont déjà été poussés à nouveau. P>
Pour trouver quels fichiers ont les conflits de fusion: P>
git rebase --continue
Combien de commits avez-vous sur votre branche de déploiement et peuvent-ils être écrasés? Rebase doit préserver tous les engagements intermédiaires dans une liste de commits et cela ressemble à certaines d'entre elles provoquent maintenant des conflits artificiels, car ils tentent de préserver un état intermédiaire artificiel qui n'a plus de sens.