Informations générales:
En raison de restrictions dans le flux de travail avec les systèmes existants, nous devons mettre en place un processus git quelque peu peu orthodoxe.
(patch) A-B---F
| |
(hotfix) C-D-E
|
(dev) 1-2-3-G
Sur la branche du patch, il y a quelques commits. Les fichiers ici sont similaires mais pas identiques à ceux de dev (les scripts de synchronisation changent l'ordre des paramètres dans de nombreux fichiers, les faisant apparaître modifiés alors qu'ils sont fonctionnellement les mêmes).
Un correctif est nécessaire sur cette branche afin qu'une branche de correctif soit créée et travaillée. Cette branche est ensuite fusionnée en patch, jusqu'à présent, tout va bien.
Ce même correctif doit être déployé sur la branche de développement afin qu'il reste relativement synchronisé avec le correctif, mais essayer de fusionner la branche du correctif conduit à git essayer de fusionner tous les fichiers non liés et `` inchangés '' de A et B, plutôt que seulement C, D et E.
Question:
Il semble que cherry-pick fasse ce que nous voulons en termes d'obtenir uniquement les modifications des validations sélectionnées, mais j'aimerais vraiment un moyen de sélectionner toutes les validations dans une branche donnée à la fois, sans avoir à rechercher les identifiants de validation à chaque fois .
Il paraît que
cherry-pick
fait ce que nous voulons pour obtenir uniquement les modifications des validations sélectionnées, mais j'aimerais vraiment pouvoir sélectionner toutes les validations dans une branche donnée à la fois, sans avoir à rechercher les identifiants de validation à chaque fois.
cherry-pick
git cherry-pick
vous permet de choisir les commits que vous avez effectués dans n'importe quelle branche vers n'importe quelle autre branche. Dans votre cas, vous pouvez simplement commander la branche principale, puis cherry-pick
toutes les validations d'une branche que vous souhaitez (cherry-pick
prend en charge les plages afin que vous puissiez spécifier le début et la fin de la validation au lieu de répertorier toutes les validations).
De cette façon, vous pouvez contrôler la façon dont vos validations apparaîtront dans la branche souhaitée.
Par exemple:
git cherry-pick ebe6942..905e279
# Find the range of commits you wish to re-add to your branch.
# then use cherry-pick to add them back to the branch
git cherry-pick start..end
# If you wish to include the start commit as well add the ^
# This will result in a cherry-pick of the start commit included as well
git cherry-pick start^..end
git log
# print out the latest commit (first one) of the given branch
git log --oneline | tail -1
merge-base
Utilisez le merge-base
commande pour trouver où la branche a été séparée de la branche d'origine:
git merge-base A B
checkout votre branche (branche cible) et faites
git cherry-pick -m 1 hashCode
Si vous souhaitez sélectionner tous les commits de la branche dev.
Essayer:
git cherry-pick ..dev
une autre façon avec l'avance rapide.
L'affaire:
vous avez commencé newBranch, vous avez validé le premier commit et vous avez réinitialisé Hard.
En conséquence, vous avez obtenu vide newBranch , non cet arbre de validation et de git tardif est propre à la tête. Vous êtes à la succursale newBranch (peut vérifier avec la branche git).
Voici une action en deux étapes:
git fsck --lost-found
git cherry-pick --ff 43a7a2d
Cela devrait également fonctionner. Nous appelons le point de divergence entre le HEAD (maître dans ce cas) et la branche et le passons au cerisier.
git merge-base Origin/dev_single_doc_fit HEAD | xargs git cherry-pick {}..HEAD^