Dans mon référentiel, j'ai une branche appelée sur aq
laquelle je travaille.
J'ai ensuite commis de nouveaux travaux et des bugs master
.
Quelle est la meilleure façon d'obtenir ces commits dans la aq
succursale? Créer une nouvelle branche master
et la fusionner avec aq
?
git pull origin my_branch_name
Réponses:
Consultez la
aq
branche et rebasez à partir demaster
.la source
git merge
serait mieux. Si les deux branches ont évolué au fil du temps, vous devez déterminer celle qui vous convient le mieux.Vous devriez pouvoir le faire
git merge origin/master
lorsque vous êtes sur votre branche aq.la source
rebase
si votre succursale est locale et n'a pas été poussée versorigin
. À utilisermerge
si votre branche est déjà poussée.rebase
réécrira l'histoire.Vérifiez d'abord pour maîtriser:
Effectuez toutes les modifications, correctifs et validations et poussez votre maître.
Retournez dans votre branche, 'aq', et fusionnez master en elle:
Votre agence sera à jour avec master. Un bon exemple basique de fusion est 3.2 Git Branching - Basic Branching and Merging .
la source
Il n'y a aucune garantie que les corrections de bogues principaux ne figurent pas parmi les autres validations, vous ne pouvez donc pas simplement fusionner. Faire
en supposant que ces validations représentent les corrections de bogues.
À partir de maintenant cependant, conservez les corrections de bogues dans une branche distincte. Vous pourrez simplement
quand vous voulez les rouler tous dans la branche de développement régulière.
la source
Soit
cherry-pick
les validations pertinentes en brancheaq
ou fusionnent branchemaster
en brancheaq
.la source
Fusionnez-le avec
aq
la source
Moyen facile
la source
Pour moi, j'avais déjà des changements en place et je voulais les dernières nouvelles de la branche de base. Je n'ai pas pu le faire
rebase
etcherry-pick
j'aurais pris une éternité, j'ai donc fait ce qui suit:donc dans ce cas:
la source
Cela ( d'ici ) a fonctionné pour moi:
Citant:
la source
Vous avez plusieurs options.
git rebase master aq
sur la branche qui conservera les noms de commit, mais NE PAS REBASE s'il s'agit d'une branche distante. Vous pouvez le fairegit merge master aq
si vous ne vous souciez pas de conserver les noms de commit. Si vous souhaitez conserver les noms de validation et qu'il s'agit d'une branche distante, la validation est effectuéegit cherry-pick <commit hash>
sur votre branche.la source
Vous pouvez également le faire en exécutant une seule ligne.
git merge aq master
Cela équivaut à
la source
git merge a b
fusionne les branchesa
etb
dans la branche actuelle. Maisgit merge a
lorsque vous êtes sur une branche,a
cela ne fait rien (c'est pourquoi cela ressemble un peu à ce qu'il fait ce que vous pensez qu'il fait). (Voir git-scm.com/docs/git-merge#Documentation/… .)ÉDITER:
Ma réponse ci - dessous les documents un moyen de fusion
master
dansaq
, où si vous affichez les détails de la fusion , il répertorie les modifications apportéesaq
avant la fusion, pas les modifications apportées àmaster
. J'ai réalisé que ce n'est probablement pas ce que vous voulez, même si vous pensez que c'est le cas!Juste:
c'est bien.
Oui, cette simple fusion montrera que les modifications de
master
ont été apportéesaq
à ce point, et non l'inverse; mais ça va - puisque c'est ce qui s'est passé! Plus tard, lorsque vous fusionnerez enfin votre branche dansmaster
, c'est quand une fusion affichera enfin toutes vos modifications telles qu'elles ont été apportées àmaster
(ce qui est exactement ce que vous voulez, et c'est le commit où les gens s'attendent à trouver ces informations de toute façon).J'ai vérifié et l'approche ci-dessous montre également exactement les mêmes changements (tous les changements effectués
aq
depuis la séparation d' origine entreaq
etmaster
) que l'approche normale ci-dessus, lorsque vous fusionnez enfin toutmaster
. Je pense donc que son seul véritable inconvénient (en plus d'être trop complexe et non standard ...: - /) est que si vous modifiez n modifications récentes avecgit reset --hard HEAD~<n>
et cela passe au-delà de la fusion, la version ci-dessous annule la «mauvaise» branche, que vous devez réparer à la main (par exemple avecgit reflog
&git reset --hard [sha]
).[Donc, ce que je pensais auparavant était que:]
Il y a un problème avec:
car les modifications affichées dans la validation de fusion (par exemple, si vous regardez maintenant ou plus tard dans Github, Bitbucket ou votre visualiseur d'historique git local préféré) sont les modifications apportées sur master, ce qui peut ne pas être ce que vous voulez.
D'autre part
affiche les modifications apportées à aq, ce qui est probablement ce que vous voulez. (Ou, du moins, c'est souvent ce que je veux!) Mais la fusion montrant les bons changements est sur la mauvaise branche!
Comment faire face?!
Le processus complet, se terminant par un commit de fusion montrant les modifications apportées sur aq (comme pour la deuxième fusion ci-dessus), mais avec la fusion affectant la branche aq, est:
Ceci: fusionne aq sur master, avance rapidement cette même fusion sur aq, l'annule sur master et vous remet sur aq!
J'ai l'impression de manquer quelque chose - cela semble être quelque chose que vous voudriez évidemment, et quelque chose qui est difficile à faire.
De plus, le rebase n'est PAS équivalent. Il perd les horodatages et l'identité des commits effectués sur aq, ce qui n'est pas non plus ce que je veux.
la source
Scénario:
Solution
la source