979 votes

Comment copier s’engage d’une branche à l’autre ?

J’ai deux branches de mon maître :

  • v2.1: (version 2) j’ai travaillé sur plusieurs mois
  • WSS: que j’ai créé hier pour ajouter une fonctionnalité spécifique à mon maître (en production)

Est-il possible de copier des validations d’hier de wss v2.1 ?

1187voto

Benjamin Bannier Points 11953

Utilisation

git cherry-pick <commit>

pour appliquer <commit> de votre branche courante.

Je me serait probablement contre-vérifier l'engage-je prendre en gitk et cherry-pick avec clique avec le bouton droit sur la validation de l'entrée il ya lieu.


Si vous voulez aller plus automatique (avec tous ses dangers) et en supposant que tous les commits depuis hier qui s'est passé sur wss que vous pouvez générer la liste des commits à l'aide de git log (--pretty proposé par Jefromi)

git log --reverse --since=yesterday --pretty=%H

donc, tout ensemble, en supposant que vous utilisez bash

for commit in $(git log --reverse --since=yesterday --pretty=%H);
do
    git cherry-pick $commit
done

Si quelque chose se passe mal ici (il y a beaucoup de potentiel), vous êtes en difficulté puisque cela fonctionne sur le live de la caisse, soit le faire en manuel cherry-picks ou de l'utilisation de rebase comme suggéré par Jefromi.

694voto

Jefromi Points 127932

Vous devriez vraiment avoir un flux de travail qui permet de faire tout cela par la fusion:

- x - x - x (v2) - x - x - x (v2.1)
           \
            x - x - x (wss)

Donc tout ce que vous avez à faire est de git checkout v2.1 et git merge wss. Si pour quelque raison vous ne pouvez vraiment pas faire cela, et vous ne pouvez pas utiliser la commande git rebase pour déplacer votre wss branche à la bonne place, la commande à saisir un unique de s'engager de quelque part, et de l'appliquer ailleurs est git cherry-pick. Il suffit de cocher la branche que vous souhaitez appliquer, et exécutez git cherry-pick <SHA of commit to cherry-pick>.

Certains des moyens, cela pourrait vous sauver:

Si votre histoire ressemble à ceci:

- x - x - x (v2) - x - x - x (v2.1)
           \
            x - x - x (v2-only) - x - x - x (wss)

Vous pouvez utiliser git rebase --onto v2 v2-only wss de déplacer wss directement sur la v2:

- x - x - x (v2) - x - x - x (v2.1)
          |\
          |  x - x - x (v2-only)
           \
             x - x - x (wss)

Ensuite, vous pouvez fusionner les! Si vous avez vraiment, vraiment, vraiment ne peut pas en arriver au point où vous pouvez fusionner, vous pouvez toujours utiliser rebase à plusieurs cherry-picks à la fois:

# wss-starting-point is the SHA1/branch immediately before the first commit to rebase
git branch wss-to-rebase wss
git rebase --onto v2.1 wss-starting-point wss-to-rebase
git checkout v2.1
git merge wss-to-rebase

Note: la raison pour laquelle elle prend un peu de travail supplémentaire afin de faire cela, c'est que c'est la création de doublons s'engage dans votre référentiel. Ce n'est pas vraiment une bonne chose - le point de l'ensemble de dérivation facile et la fusion est d'être capable de tout faire en faisant commettre(s) en un seul endroit et de les fusionner en partout où ils sont nécessaires. Dupliquer s'engage signifie une intention de ne jamais fusionner ces deux branches (si vous décidez que vous voulez plus tard, vous obtiendrez des conflits).

26voto

Charles Ma Points 12330

Vous pourriez créer un patch des validations que vous souhaitez copier et appliquer le patch à la branche de destination.

14voto

Petr Sykora Points 31

Ou si vous êtes peu moins du côté de l’évangéliste vous pouvez faire un peu façon laide, que je me sers. Dans deploy_template il y commet que je veux copier sur mon maître comme branche déployer

Cela va créer la nouvelle branche déployer (j’ai utiliser-f pour écraser existant déployer branch) sur deploy_template, puis rebase cette nouvelle branche sur maître, laissant deploy_template intact.

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