web-dev-qa-db-fra.com

"git pull" ou "git fusion" entre les branches master et development

J'ai ma branche master et une branche develop pour avoir travaillé sur quelques modifications. J'ai besoin de fusionner les changements de master dans develop, mais finira par tout fusionner de develop à master. J'ai deux flux de travail différents en tête:

  1. git pull Origin master dans la branche develop
  2. git merge master dans la branche develop

Quelle est la meilleure façon de faire cela et pourquoi?

239
Carson

Soyez prudent avec rebase. Si vous partagez votre branche de développement avec qui que ce soit, rebase peut tout gâcher. Rebase n'est valable que pour vos propres succursales locales.

En règle générale, si vous avez poussé la branche vers Origin, n'utilisez pas de rebase. Au lieu de cela, utilisez la fusion.

101
Eric Leads

Ce workflow fonctionne le mieux pour moi:

git checkout -b develop

... faire des changements ...

... le maître des avis a été mis à jour ...

... engager des changements pour développer ...

git checkout master
git pull

... ramener ces changements dans le développement ...

git checkout develop
git rebase master

... faire d'autres changements ...

... engagez-les à développer ...

... les fusionner en maître ...

git checkout master
git pull
git merge develop
345
Ian Lotinsky

La meilleure approche pour ce genre de chose est probablement git rebase . Il vous permet d'extraire les modifications du maître dans votre branche de développement, mais de laisser tout votre travail de développement "par-dessus" (plus tard dans le journal de validation) les éléments du maître. Lorsque votre nouveau travail est terminé, la fusion avec le maître est alors très simple.

23
divegeek

Si vous ne partagez pas la branche develop avec qui que ce soit, je redéfinirais la base à chaque fois que le master serait mis à jour. De cette manière, vous ne ferez plus de commits de fusion dans votre historique une fois que vous fusionnerez. Le flux de travail dans ce cas serait comme suit:

> git clone git://<remote_repo_path>/ <local_repo>
> cd <local_repo>
> git checkout -b develop
....do a lot of work on develop
....do all the commits
> git pull Origin master
> git rebase master develop

Les étapes ci-dessus garantiront que votre branche de développement sera toujours au courant des dernières modifications de la branche principale. Une fois que vous avez terminé avec develop branche et que les modifications les plus récentes ont été modifiées sur le maître, vous pouvez simplement le fusionner:

> git checkout -b master
> git merge develop
> git branch -d develop
5
KiRPiCH

ma règle est la suivante:

rebase pour les branches avec le même nom, merge sinon.

des exemples pour les mêmes noms seraient master, Origin/master et otherRemote/master.

si develop n'existe que dans le référentiel local et qu'il est toujours basé sur un commit récent Origin/master, vous devez l'appeler master et y travailler directement. cela simplifie votre vie et présente les choses telles qu’elles sont: vous développez directement sur la branche master.

si develop est partagé, il ne devrait pas être rebasé sur master, mais simplement fusionné avec --no-ff. vous développez sur develop. master et develop ont des noms différents, car nous voulons que ce soient des choses différentes et restons séparés. ne les faites pas de même avec rebase.

1
hoijui