Ce post est plutôt un mémo pour mon usage personnel, mais s'il peut aider quelqu'un j'en serai ravi :). Voilà donc un mémo traitant des problématiques ou cas d'utilisation que j'ai rencontré. Pour mémoire, je rappelle que je suis dans un environnement SVN (centralisé) - GIT (en client sur mon poste). Cf. les articles précédents: mémo1, mémo2, mémo3
Cas d'utilisation
Fusion d'un commit d'un branche vers une autre
Au cours de la vie des projets, il est courrant de faire une branche de maintenance pour faire évoluer le code d'une version déja officialisée. Ensuite, il est possible (cf. épisode précédent) de faire un merge (ou rebase) de cette branche sur la branche principale (master ou trunk) afin de récupérer les corrections. Or il arrive parfois que sur la branche principale, des ‘refactors’ aient été faits rendant certains commits de la branche de maintenance obsolètes. Donc il ne faut pas les reporter sur la branche principale. Il faut donc faire une selection des commits voulus et les appliquer sur la branche principale. La commande Git magique est le cherry-pick: Workflow:
Sur la branche de maintenance identifier à l'aide de
git log
les commits (relevé le SHA-1 associé)Sur la branche principale appliqué les commits
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
|
Tout est en ordre ! En cas de conflit c'est comme d'habitude mémo3
Note:
git logAll est un alias inséré dans ma config de cette façon:
git config alias.logall=log --all --graph --color --name-status --format='%C(yellow)%h%Creset %cr %C(blue)%cn%Creset -%C(auto)%d%Creset %s'
/!\ REGLES A RESPECTER - RAPPEL
- git svn NE PAS partager/interrargir avec un autre repo git, toujours repasser par le repo SVN
- Garder son historique le plus linéaire possible (rebase est ton ami)
- Ne rebasez jamais des commits qui ont déjà été poussés sur un dépôt public.`