web-dev-qa-db-fra.com

Tenir une succursale à jour avec le maître

J'ai un référentiel distant que j'ai extrait et à partir duquel je fais des branchements. Je veux garder la nouvelle branche à jour avec les modifications apportées au master. Je pense au flux de travail ci-dessous, est-ce logique ou existe-t-il de meilleures façons de le faire?

  1. Branchement initial et paiement:

    git checkout master
    
    git pull
    
    git checkout -b my_branch
    
  2. Faites un peu de travail dans my_branch, puis périodiquement:

    git checkout master
    
    git pull
    
    git checkout my_branch
    
    git merge master --no-ff
    

Répétez l'étape 2 si nécessaire, en poussant périodiquement vers la télécommande my_branch.

Ensuite, lorsque vous êtes prêt pour une fusion de retour:

git checkout master

git merge my_branch --no-ff

Ça va?

24
larryq

Vous pouvez simplifier vos commandes:

1.

git fetch
git checkout -b my_branch Origin/master

2.

git fetch
git merge Origin/master

git fetch met à jour vos branches distantes, il n'est généralement pas nécessaire d'avoir une copie locale d'une branche lorsque vous ne prévoyez pas de travailler sur cette branche.

Vous pouvez omettre le --no-ff après le réglage git config --global merge.ff false.

git help config dit:

   merge.ff
       By default, Git does not create an extra merge commit when merging
       a commit that is a descendant of the current commit. Instead, the
       tip of the current branch is fast-forwarded. When set to false,
       this variable tells Git to create an extra merge commit in such a
       case (equivalent to giving the --no-ff option from the command
       line). When set to only, only such fast-forward merges are allowed
       (equivalent to giving the --ff-only option from the command line).

Soit conscient que git pull n'est qu'une combinaison de git fetch et git merge.

Habituellement, vous voulez juste git pull --rebase qui est essentiellement git fetch plus git rebase, et crée une histoire beaucoup plus nette.

Y a-t-il une raison à vos "poussées périodiques"? Si personne d'autre ne travaille sur la même branche, ce serait parfaitement bien, juste de pousser après avoir tout fini.

17
michas

Je conseillerais d'utiliser un workflow de rebase. Donc, au lieu d'utiliser git pull Tu devrais utiliser git pull --rebase.

Je ferais de même avec la branche fonctionnalité. Donc, au lieu de faire un git merge master --no-ff J'utiliserais un git rebase master. Cependant, si la branche de fonctionnalité est destinée à être partagée avec des collègues pendant le développement, il est préférable de fusionner périodiquement la branche principale dans la branche de fonctionnalité.

Mais pour être honnête, je travaille dans une petite équipe et si nous devons travailler ensemble sur une branche de fonctionnalités et que nous devons la mettre à jour avec le maître, nous suspendons simplement notre travail pendant un court instant (et communiquons le processus clairement) , rebaser sur le maître et forcer Appuyez sur la branche de fonction. Mais oui, cela ne s'adapte pas aux grandes équipes. Cependant, je trouve qu'il est beaucoup plus pratique de travailler avec une branche de fonctionnalité qui est rebasée sur le maître au lieu d'avoir à gérer les fusions du maître.

Assurez-vous de lire ceci.

Git workflow et rebase vs merge questions

11
Christoph