web-dev-qa-db-fra.com

Fusionner la branche de développement avec le maître

J'ai deux branches à savoir master et development dans un référentiel GitHub. Je fais tout mon développement dans la branche de développement comme indiqué.

git branch development
git add *
git commit -m "My initial commit message"
git Push -u Origin development

Maintenant, je veux fusionner toutes les modifications de la branche development dans la master. Mon approche actuelle est:

git checkout master 
git merge development
git Push -u Origin master 

S'il vous plaît laissez-moi savoir si la procédure que je suis est correcte.

581
Pawan

J'aime généralement fusionner master dans development en premier de sorte que, s’il ya des conflits, je puisse résoudre le problème dans la branche development elle-même et que master reste propre.

(on branch development)$ git merge master
(resolve any merge conflicts if there are any)
git checkout master
git merge development (there won't be any conflicts now)

Il n’ya pas beaucoup de différence entre les deux approches, mais j’ai parfois remarqué que je ne souhaitais pas encore fusionner la branche en master, mais qu’il y avait encore du travail à faire avant de les fusionner. fusionné, j'ai donc tendance à laisser master intact jusqu'à la fin.

EDIT: De commentaires

Si vous souhaitez savoir qui a effectué la fusion et à quel moment, vous pouvez utiliser l'indicateur --no-ff lors de la fusion. Cela n’est généralement utile que lors de la fusion de development dans master (dernière étape), car vous devrez peut-être fusionner master dans development (première étape) plusieurs fois dans votre flux de travail et créer un nœud de validation pour ces opérations risque de ne pas être très utile.

git merge --no-ff development
893
Sailesh

Personnellement, mon approche est semblable à la vôtre, avec quelques branches de plus et des écritures réduites quand elles retournent à master.

Un de mes collègues n'aime pas trop devoir changer de branche et reste dans la branche de développement avec une fonction similaire à la suivante, toutes exécutées à partir de la branche de développement.

git fetch Origin master

git merge master

git Push Origin development:master

La première ligne s'assure qu'il a des commits en amont à maîtriser depuis la dernière mise à jour de son référentiel local.

La seconde tire ces changements (le cas échéant) du maître dans le développement

La troisième pousse la branche de développement (maintenant complètement fusionnée avec le maître) jusqu'à Origin/master.

Son flux de travail de base est peut-être un peu faux, mais c'est l'essentiel.

78
David Culp

Ce serait formidable si vous pouvez utiliser le flux de travail Git Flow. Il peut fusionner la branche de développement en maître facilement.

Ce que vous voulez faire, c'est simplement suivre les instructions de git flow mentionnées ici:

http://danielkummer.github.io/git-flow-cheatsheet/

pas:

  • configurer le projet de flux git 
  • créer des branches et fusionner tout pour développer
  • lancez la commande "git flow release start"
  • puis fournir un message significatif pour la libération
  • lancez la commande "git flow release finish"
  • il fusionnera tout pour maîtriser et changera la branche pour maîtriser.
  • lancez la commande "git Push" pour publier les modifications sur le maître distant.

Vérifiez le lien ci-dessus pour plus d'informations.

18
Harsha

Explication du bas pour ceux qui sont venus ici sans aucune connaissance des branches.

La logique de développement de base de branche principale est la suivante: vous travaillez uniquement sur une autre branche et utilisez maître uniquement pour fusionner d'autres branches.

Vous commencez à créer une nouvelle branche de cette façon:

1) Clonez le référentiel nécessaire dans votre racine Web:

$ cd /var/www
$ git clone [email protected]:user_name/repository_name.git

2) Créer une nouvelle branche. Il contiendra les derniers fichiers de votre référentiel de branche maître

$ git branch new_branch

3) Changez la branche git en new_branch

$ git checkout new_branch

4) Coder, commettre, comme d'habitude…

$ git add .
$ git commit -m “Initial commit”
$ git Push (pushes commits only to “new_branch”)

5) Lorsque le travail est terminé sur cette branche, fusionner avec la branche «maître»:

$ git merge master
$ git checkout master (goes to master branch)
$ git merge development (merges files in localhost. Master shouldn’t have any  commits ahead, otherwise there will be a need for pull and merging code by hands!)
$ git Push (pushes all “new_branch” commits to both branches - “master” and “new_branch”)
17
Gediminas

Oui, c'est correct, mais cela ressemble à un flux de travail très basique, dans lequel vous ne mettez que les modifications en mémoire tampon avant qu'elles ne soient prêtes pour l'intégration. Vous devriez vous pencher sur des workflows plus avancés pris en charge par git. Vous aimerez peut-être l'approche topic branch , qui vous permet de travailler sur plusieurs fonctionnalités en parallèle, ou l'approche graduation , qui étend légèrement votre flux de travail actuel.

8
Sergiu Dumitriu

git pull (branche de développement actuelle)

maître de caisse 

git pull

développement de fusions

maître git Push Origin

7
Rizwan Siddiquee

Si vous êtes sur Mac ou Ubuntu, accédez au dossier de travail de la branche. Dans le terminal 

supposons que harisdev soit le nom de la branche. 

git checkout master

s'il y a des fichiers non suivis ou non validés, vous obtenez une erreur et vous devez valider ou supprimer tous les fichiers non suivis ou non validés. 

git merge harisdev 

git Push Origin master

Une dernière commande pour supprimer la branche. 

$ git branch -d harisdev
4
Haris Np

C'est comme ça que je le fais d'habitude. Tout d’abord, assurez-vous que vous êtes prêt à fusionner vos modifications en maître.

  1. Vérifiez si le développement est à jour avec les dernières modifications de votre serveur distant avec un git fetch
  2. Une fois l'extraction terminée git checkout master.
  3. Assurez-vous que la branche principale possède les dernières mises à jour en exécutant git pull.
  4. Une fois les préparatifs terminés, vous pouvez commencer la fusion avec git merge development.
  5. Poussez les modifications avec git Push -u Origin master et vous avez terminé.

Vous pouvez trouver plus d'informations sur git fusion dans l'article.

4
Nesha Zoric

Étape 1

Créez et basculez vers une nouvelle branche "dev", dans laquelle vos fichiers git locaux sont synchronisés avec la télécommande, mais la branche "dev" n'existe pas encore.

git branch dev # create
git checkout dev # switch
# No need to git add or git commit, the current
# branch's files will be cloned to the new branch by-default.
git Push --set-upstream Origin dev # Push the "dev" branch to the remote.

Étape 2

Apportez vos modifications à la branche "dev" (votre courant si vous suivez l'étape 1), validez-les et envoyez-les dans la branche "dev" distante.

git add .
git commit -S -m "my first commit to the dev branch" # remove the -S if you're not "secure", secure = when you already setup crypto private and public keys (i.e "verified" green sign in github)
git Push -u Origin dev # Push the changes to the remote, -u Origin dev is optional but good to use.

Étape 3

Fusionner votre branche "dev" dans le "maître".

git checkout dev # switch to "dev" branch if you're not already.
git merge master # optionally, this command is being used to resolve any conflicts if you pushed any changes to your "master" but "dev" doesn't have that commit.
git checkout master # switch to "master", which is the branch you want to be merged.
git merge --no-ff dev # merge the "dev" branch into the "master" one.
4
kataras

1) Sur le développement de la branche, vérifiez le statut de git en utilisant la commande suivante:

git status

Il ne devrait y avoir aucun code non engagé. Si c'est le cas, envoyez votre code sur la branche Développement:

git add *

git commit -m "My initial commit message"

git Push Origin Development

2) Sur la branche Développement, exécutez les deux commandes suivantes:

git branch -f master HEAD

git Push -f Origin master

Il va pousser votre code de branche de développement à la branche principale.

3
Himanshu Mahajan

Basé sur @Sailesh et @DavidCulp:

(on branch development)
$ git fetch Origin master
$ git merge FETCH_HEAD
(resolve any merge conflicts if there are any)
$ git checkout master
$ git merge --no-ff development (there won't be any conflicts now)

La première commande s'assurera que tous les commits en amont sont effectués sur le maître distant, avec une réponse Sailesh qui ne se produirait pas.

Le second effectuera une fusion et créera des conflits que vous pourrez ensuite résoudre.

Après cela, vous pouvez enfin valider master pour passer à master.

Ensuite, vous fusionnez la branche de développement sur le maître local. L'indicateur no-ff créera un nœud de validation dans le maître pour que la fusion soit traçable.

Après cela, vous pouvez vous engager et pousser votre fusion.

Cette procédure permet de s'assurer que les utilisateurs peuvent voir un engagement de fusion développement-développement que les utilisateurs peuvent consulter. Ensuite, s'ils consultent la branche Développement, ils peuvent voir les engagements individuels que vous avez effectués à l'égard de cet élément au cours de son développement.

Si vous le souhaitez, vous pouvez éventuellement modifier votre engagement de fusion avant de cliquer sur Push, si vous souhaitez ajouter un résumé de ce qui a été fait dans la branche de développement.

EDIT: ma réponse originale suggérait un git merge master qui ne faisait rien, il vaut mieux le faire git merge FETCH_HEAD après avoir récupéré l’origine/master

2
Cisco

Une fois que vous avez "vérifié" la branche de développement, vous ...

 git add .
 git commit -m "first commit"
 git Push Origin dev
 git merge master

 git checkout master 
 git merge dev
 git Push Origin master 
1
Tiago Medici

Si vous utilisez gerrit, les commandes suivantes fonctionnent parfaitement.

git checkout master
git merge --no-ff development

Vous pouvez enregistrer avec le message de validation par défaut. Assurez-vous que l'identifiant de modification a été généré. Vous pouvez utiliser la commande suivante pour vous en assurer.

git commit --amend

Ensuite, appuyez avec la commande suivante.

git Push Origin HEAD:refs/for/refs/heads/master

Vous pourriez rencontrer un message d'erreur comme ci-dessous.

! [remote rejected] HEAD -> refs/for/refs/heads/master (you are not allowed to upload merges)

Pour résoudre ce problème, l’administrateur du projet gerrit doit créer une autre référence dans gerrit nommée 'refs/for/refs/head/master' ou 'refs/for/refs/heads/*' (qui couvrira toutes les branches à l’avenir). Ensuite, accordez l’autorisation «Push Merge Commit» à cette référence et l’autorisation «Soumettre» si nécessaire pour soumettre le GCR.

Maintenant, essayez à nouveau la commande Push ci-dessus, et cela devrait fonctionner.

Crédits:

https://github.com/ReviewAssistant/reviewassistant/wiki/Merging-branches-in-Gerrit

https://stackoverflow.com/a/21199818/3877642

0

Je pense que la solution la plus simple serait

    git checkout master
    git remote update
    git merge Origin/Develop -X theirs
    git commit -m commit -m "New release"
    git Push --recurse-submodules=check --progress "Origin" refs/heads/Master

Cela préserve également l'historique de toutes les branches utilisées

0
Vishal