J'ai deux branches à savoir master
et development
dans un référentiel GitHub. Je fais tout mon développement dans la branche 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 development
branche dans le master
. Mon approche actuelle est:
git checkout master
git merge development
git push -u origin master
Veuillez me faire savoir si la procédure que je suis est correcte.
git pull -u
définit le suivi en amont de la branche (ou de toutes les branches si vous en appuyez sur plusieurs). Une fois qu'il est défini, le suivi persiste. Il n'y a aucune raison de l'utiliser en permanence.Réponses:
J'aime généralement fusionner
master
dans ledevelopment
premier afin que s'il y a des conflits, je puisse résoudre dans ladevelopment
branche elle-même et mesmaster
restes propres.Il n'y a pas beaucoup de différence entre les deux approches, mais j'ai parfois remarqué que je ne veux pas encore fusionner la branche
master
, après les avoir fusionnées, ou qu'il reste encore du travail à faire avant de pouvoir les fusionner , donc j'ai tendance à laissermaster
intacte jusqu'à la fin.EDIT: Des commentaires
Si vous souhaitez savoir qui a effectué la fusion et quand, vous pouvez utiliser l'
--no-ff
indicateur lors de la fusion pour le faire. Ceci est généralement utile que lors de la fusiondevelopment
dans lamaster
(dernière étape), parce que vous pourriez avoir besoin de fusionnermaster
endevelopment
(première étape) plusieurs fois dans votre flux de travail et la création d' un noeud pour commettras ceux - ci pourraient ne pas être très utile.la source
--no-ff
à la fusion à master est nécessaire pour résoudre ce problème.--no-ff
. :)git merge --no-ff development
juste pour corriger l'utilisation de @ elect.A->B->C
être maître etA->X->Y
est votre branche de développement. Si vous modifiez une partie d'un fichier dansX
lequel il pourrait y avoir eu des conflits avec une modification dansA
, ce ne sera pas un conflit, carA
est un ancêtre deX
. En ce qui concerne les modifications perdues, consultez stackoverflow.com/questions/7147680/… pour récupérer les modifications.Personnellement, mon approche est similaire à la vôtre, avec quelques branches de plus et quelques écrasements de commits quand ils reviennent au master.
Un de mes collègues n'aime pas trop devoir changer de branche et reste sur la branche de développement avec quelque chose de similaire aux suivants tous exécutés à partir de la branche de développement.
La première ligne s'assure qu'il a des validations en amont qui ont été faites pour master depuis la dernière mise à jour de son référentiel local.
Le second tire ces changements (le cas échéant) du maître au développement
Le troisième pousse la branche de développement (maintenant complètement fusionnée avec master) vers origin / master.
J'ai peut-être un peu tort son flux de travail de base, mais c'est l'essentiel.
la source
rebase
mise à jour de ladev
branche au lieu demerge
.Explication du bas pour ceux qui sont venus ici sans aucune connaissance des branches.
Vous commencez à créer une nouvelle branche de cette façon:
1) Cloner le référentiel dans votre répertoire local (ou créer un nouveau référentiel):
2) Créez une nouvelle branche. Il contiendra les derniers fichiers de votre référentiel de branche principale
3) Changez votre branche git actuelle en new_branch
4) Faites du codage, engage, comme d'habitude…
5) Lorsque le travail est terminé sur cette branche, fusionnez avec la branche «maître»:
Mise à jour: je recommande fortement d'utiliser GitKraken pour cela pour voir l'arborescence visuelle des changements et mieux voir toute la logique et les validations.
la source
release
branche our of thedevelop
. Puis ajouté un fichier de note de version et validé. Puis a terminé la version qui fusionne à la foismaster/develop
. mais ma branche principale avait seulement une note de sortie nouvellement ajoutée. aucun autre fichier lors des validations de développement précédentes n'y a été mis à jour.Ce serait formidable si vous pouviez utiliser le workflow Git Flow . Il peut fusionner facilement la branche de développement en maître.
Ce que vous voulez faire, c'est simplement suivre l'instruction git-flow mentionnée ici:
PAS:
git flow release start <version_number>
git flow release finish <version_number>
git push
pour publier les modifications sur le maître distant .Pour plus d'informations, visitez la page - http://danielkummer.github.io/git-flow-cheatsheet/
la source
la source
Oui, c'est correct, mais cela ressemble à un flux de travail très basique, où vous mettez simplement les modifications en mémoire tampon avant qu'elles ne soient prêtes pour l'intégration. Vous devriez examiner des workflows plus avancés pris en charge par git. Vous aimerez peut-être l' approche par branche de sujet , qui vous permet de travailler sur plusieurs fonctionnalités en parallèle, ou l' approche de graduation qui étend un peu votre flux de travail actuel.
la source
Si vous êtes sur Mac ou Ubuntu, accédez au dossier de travail de la branche. Dans le terminal
supposons que harisdev est le nom de la branche.
s'il y a des fichiers non suivis ou non validés, vous obtiendrez une erreur et vous devrez valider ou supprimer tous les fichiers non suivis ou non validés.
Une dernière commande pour supprimer la branche.
la source
Étape 1
Créez et passez à une nouvelle branche "dev", où vos fichiers git locaux sont synchronisés avec la branche distante mais "dev" n'existe pas encore.
Étape 2
Apportez vos modifications à la branche "dev" (votre courant si vous suivez l'étape 1), validez-les et envoyez-les à la branche "dev" distante.
Étape 3
Fusionnez votre branche "dev" dans le "master".
la source
C'est comme ça que je le fais d'habitude. Tout d'abord, assurez-vous que vous êtes prêt à fusionner vos modifications dans master.
git fetch
git checkout master
.git pull
git merge development
git push -u origin master
et vous avez terminé.Vous pouvez en savoir plus sur la fusion de git dans l'article.
la source
1) Sur le développement de branche, vérifiez l'état de git en utilisant la commande suivante:
Il ne devrait pas y avoir de code non engagé. Si c'est le cas, poussez votre code sur la branche Développement:
2) Sur la branche Développement, exécutez les deux commandes suivantes:
Il poussera votre code de branche de développement vers la branche principale.
la source
-f
n'est pas recommandé.Basé sur @Sailesh et @DavidCulp:
La première commande s'assurera que vous avez tous les commits en amont 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 commander master pour passer en 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 master pour que toute la fusion soit traçable.
Après cela, vous pouvez valider et pousser votre fusion.
Cette procédure s'assurera qu'il y a un commit de fusion du développement au master que les gens peuvent voir, puis s'ils regardent la branche de développement, ils peuvent voir les validations individuelles que vous avez faites dans cette branche pendant son développement.
Vous pouvez éventuellement modifier votre commit de fusion avant de le pousser, si vous souhaitez ajouter un résumé de ce qui a été fait dans la branche de développement.
EDIT: ma réponse d'origine suggérait un
git merge master
qui n'a rien fait, il vaut mieux le fairegit merge FETCH_HEAD
après avoir récupéré l'origine / masterla source
Une fois que vous avez «vérifié» la branche de développement, vous ...
la source
Si vous utilisez gerrit, les commandes suivantes fonctionnent parfaitement.
Vous pouvez enregistrer avec le message de validation par défaut. Assurez-vous que l'ID de modification a été généré. Vous pouvez utiliser la commande suivante pour vous en assurer.
Poussez ensuite avec la commande suivante.
Vous pourriez rencontrer un message d'erreur comme ci-dessous.
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 / heads / master' ou 'refs / for / refs / heads / *' (qui couvrira toutes les branches à l'avenir). Accordez ensuite 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
la source
Je pense que la solution la plus simple serait
Cela préserve également l'historique de toutes les branches utilisées
la source
la source
pull
nouveau. De plus, la valeur ajoutée de cette réponse n'est pas claire par rapport aux réponses existantes.