"git pull" ou "git merge" entre le maître et les branches de développement

, j'ai mon master branche develop branche pour travailler sur quelques changements. J'ai besoin de fusionner les changements de master dans develop, mais finira par fusionner tout de develop dans master. J'ai deux flux de travail différents en tête:

  1. git pull origin master dans develop branche
  2. git merge master dans develop branche

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

235
demandé sur Dom 2010-12-29 20:55:55

5 réponses

Soyez prudent avec rebase. Si vous partagez votre branche de développement avec n'importe qui, rebase peut faire un gâchis. Rebase est bon seulement pour vos propres branches locales.

Règle générale, si vous avez poussé la branche à origin, n'utilisez pas rebase. Au lieu de cela, utilisez merge.

97
répondu Eric Leads 2011-02-02 16:17:09

Ce flux de travail fonctionne le mieux pour moi:

git checkout -b develop

...faire quelques changements...

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

...engager des changements à développer...

git checkout master
git pull

...Apportez ces changements dans développer...

git checkout develop
git rebase master

...faire d'autres changements...

...s'engager à développer...

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

git checkout master
git pull
git merge develop
338
répondu Ian Lotinsky 2012-12-17 16:48:21

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

23
répondu divegeek 2011-04-05 14:53:42

Si vous ne partagez pas la branche develop avec qui que ce soit, alors je la rebaserais à chaque mise à jour de master, de cette façon vous n'aurez pas de commits de fusion partout dans votre historique une fois que vous fusionnerez develop EN master. Le flux de travail dans ce cas serait le suivant:

> 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 assureront que votre branche develop sera toujours au-dessus des dernières modifications de la branche master. Une fois que vous avez terminé avec develop branch et qu'il est rebasé aux derniers changements sur master vous pouvez il suffit de le fusionner:

> git checkout -b master
> git merge develop
> git branch -d develop
5
répondu KiRPiCH 2010-12-29 22:32:26

Ma règle de base est:

rebase pour les branches portant 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 il est toujours basé sur une récente origin/master engager, vous devez l'appeler master, et y travailler directement. cela simplifie votre vie et présente les choses telles qu'elles sont réellement: vous vous développez directement sur la branche master.

Si develop est partagé, il ne devrait pas être rebasé sur master, juste fusionné avec --no-ff. vous développez sur develop. master et develop ont des noms différents, parce que nous voulons être des choses différentes, et rester séparés. ne les faites pas de même avec rebase.

1
répondu hoijui 2016-09-06 07:45:29