11 votes

Comment rebaser ma branche de fonctionnalité vers la branche de développement dans git avec le moins de conflits possibles ?

J'ai ma branche de fonctionnalité qui a dépassé environ 30 commits ou plus. Pendant ce temps, dans la branche de développement, quelques autres fonctionnalités ont été poussées par d'autres développeurs. Par conséquent, chaque fois qu'une nouvelle fonctionnalité est publiée dans la branche de développement, on me demande de.. :

  1. Rebasez la branche de développement sur ma branche de fonctionnalité
  2. Résoudre les conflits, le cas échéant
  3. Continuez à développer dans votre branche de fonctionnalité

Le problème

La deuxième étape est le cou du poulet ici. Lors du rebasement, il me donne des conflits pour chaque de cette branche. C'est vraiment itératif et redondant. Notez que je ne peux pas toujours rebaser la branche de développement immédiatement puisque mon propre travail dans ma branche reste en cours.

Ce que j'ai essayé ?

  1. A squash et réduire mes commits autant que possible (mais cela aide moins, car la plupart du temps il n'y a rien à écraser)
  2. A stash mes changements en cours, et le développement de la base et puis le déballage de mes changements. (mais ici, j'ai aussi des conflits)
  3. Utilisation de -preserve-merges avec rebasement. (mais tout le monde ici crie que cette utilisation est totalement découragé )

Ainsi, quelle est l'approche optimale pour traiter le rebasage du développement sur la branche de fonctionnalité avec le moins de conflits possible lorsque la branche de fonctionnalité elle-même a de nombreux commits. Je suis un novice, et donc une réponse avec une explication utile (ou un lien) sera d'une grande aide pour procéder.

7voto

VonC Points 414372

Le flux de travail est sain (rebase).
Mais les conflits ne doivent pas être résolus à chaque fois, encore et encore.

Pour cela, vous avez git rerere : l'activer ( git config --global rerere.enabled true ), résoudre le conflit une dernière fois (ou faire un le réentraînement manuel o utiliser contrib/rerere-train.sh ), et votre prochain rebasement réutilisera ces résolutions de conflits lors de votre prochain rebasement.

3voto

Francesco Points 2787

Je suggère de petite quantité d'éléments (un ou deux jours), et votre branche de fonctionnalité sera également petite. Une autre solution serait de ne pas rebaser chaque fois que quelque chose est poussé vers la branche de développement, mais seulement parfois, ou juste une fois avant la fusion. Là encore, il faut que la fonctionnalité soit petite, sinon vous aurez trop de conflits en même temps.

En ce qui concerne votre question, vous ne pouvez pas minimiser le nombre de conflits dans un rebasement. S'il y a des conflits, vous ne pouvez pas les éviter.

Mais il y a une façon dont git peut vous aider : Je vous suggère d'activer rerere qui signifie réutilisation de la résolution enregistrée . Avec cela, git enregistre comment vous résolvez un conflit et la prochaine fois que le conflit apparaît, la résolution est réappliquée de sorte que vous trouvez le conflit déjà résolu. Cela devrait accélérer votre flux de travail.

Vous pouvez activer rerere globalement avec

git config --global rerere.enabled true

0voto

yorammi Points 2916

Essayez de git merge de la branche de développement vers la branche de fonctionnalité avant d'effectuer le transfert de la branche de développement vers la branche de fonctionnalité. git rebasement . Il sera plus informatif de cette façon.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X