Nous avons récemment basculé de SVN à GIT, et j'ai quelques problèmes pour convertir notre flux de travail précédent. La plupart du temps, tout fonctionne, mais aujourd'hui, j'ai eu un conflit bizarre.Comprendre le conflit Git Cherry Pick
Je suis capable de résoudre le conflit, mais j'aimerais savoir d'où cela vient, parce que, à ma connaissance, il ne devrait pas y avoir de conflit dans cette situation.
Configuration
Dans notre dépôt, nous avons une branche master
sur laquelle nous développons. Quatre fois par an, nous publions une nouvelle version. Nous branche de master
en Release-x
et cela est livré après les tests.
Nous avons plusieurs versions de production en production en même temps. Si un bogue est trouvé, cela doit être corrigé sur toutes les branches de publication (supportées). Une seule branche de publication utilisant des balises pour identifier les différentes versions n'est donc pas un workflow valide.
Nous avons donc actuellement ces branches: master
, Release-15Q1
, Release-15Q2
et Release-15Q3
Dites par exemple, nous avons trouvé une erreur causant un bogue dans master
, nous fixerait puis cherry-pick
-le sur Release-15Q1
, Release-15Q2
et Release-15Q3
donc, maintenant sur le conflit, je suis face:
le fichier était properties.dat
chan ged dans master
, après branchement Release-15Q3
Properties.dat (Release-15Q3
)
serverip=1.1.1.1
serverport=11
name=MyApp
Properties.dat (master
)
serverip=2.2.2.2
serverport=22
name=BetterName
développement est allé sur ... tout bon. Ensuite, nous avons remarqué un bug où nous devions ajouter une propriété supplémentaire au fichier pour désactiver le bug.
Properties.dat (master
)
serverip=2.2.2.2
serverport=22
name=BetterName
+ allowBug=false
Ce correctif-commit doit également être appliqué aux trois autres branches. Je vais donc à chaque branche et utilise la commande cerise-pick.
Cela me donne des conflits sur les trois premières lignes, mais je ne comprends pas vraiment pourquoi.
J'étais en supposant que, avec la cueillette de cerise vous ne rejeu que commettras spécifique, il faut donc ajouter que la allowBug = false ligne au bon endroit. Cela ne devrait pas avoir d'importance si d'autres changements ont été apportés, n'est-ce pas? Parce que je ne fusionne pas les branches?
Pourquoi cela donne-t-il un conflit? Ces autres changements ne devraient-ils pas être ignorés?
PS: une fois que vous résoudre le conflit, si vous êtes préoccupé par git se rappeler comment vous avez résolu ce conflit, vous pouvez activer rerere git: git config --global rerere.enabled true – letimome