2009-11-27 7 views
1

J'ai donc 3 branches git:Fusion de plusieurs branches git en master?

  • maître
  • rafraîchissement
  • auth_upgrade

Je n'ai pas vraiment été en utilisant des branches comme je le devrais ... donc master est ainsi obsolète, refresh est un peu obsolète et auth_upgrade est en fait la branche qui est complètement à jour.

Donc ... Je veux finalement faire auth_upgrade la branche maître, puis git push à mon dépôt de github.

Quel est le meilleur processus pour cela?

Répondre

2

Vous pouvez tirer auth_upgrade dans master.

$ git co master 
$ git pull . auth_upgrade 
  • puis faire un travail sur la canalisation principale master et d'utiliser cette branche pour se synchroniser avec votre télécommande ..
  • appliquer la même procédure pour refresh, s'il y a des changements uniques que vous voulez inclure ..

voir:

$ man git-pull 

    git-pull - Fetch from and merge with another repository or a local branch 
+0

Le problème que je rencontre actuellement est qu'il existe toutes sortes de conflits avec les différences de fichiers entre auth_upgrade et master. Comment puis-je pour auth_upgrade juste remplacer les différences de code dans le maître? – Shpigford

+0

Veuillez regarder dans/http://www.kernel.org/pub/software/scm/git/docs/git-merge.html/ /Stratégies de fusion: ours/ Ceci résout le nombre de têtes, mais le L'arbre résultant de la fusion est toujours celui de la tête de la branche courante, ignorant ainsi tous les changements de toutes les autres branches. Il est destiné à être utilisé pour remplacer l'ancienne histoire de développement des branches latérales. – miku

0

Vous pouvez renommer les branches avec l'option git branch -m:

git branch -m master old_master 
git branch -m auth_upgrade master 
+0

Mais si je renomme '' auth_upgrade' à master' et ensuite essayer de pousser à github, Je reçois des erreurs 'non-fast-forward'. De plus, tous les nouveaux fichiers et les changements entre 'master' et' auth_ugrade' ne sont pas poussés donc quand je déploie de la branche, les fichiers sont complètement décalés. – Shpigford

+0

Ah, vous n'avez pas mentionné que 'master' n'était pas un ancêtre de' auth_upgrade'. Cela fait une différence.Je vais laisser ma réponse au cas où cela serait utile pour quelqu'un d'autre qui a une situation similaire qui peut être traitée avec un changement de nom. –

0

Si, lorsque vous dites 'à jour' t Les vieilles branches sont des ancêtres stricts alors vous n'avez pas vraiment de problèmes de fusion.

Si vous voulez juste faire votre succursale dans la branche principale de votre dépôt distant, vous pouvez simplement faire:

git push origin HEAD:master 

Edit: d'un de vos commentaires il semble que vous n'ont pas tous les changements de maître à distance dans votre branche actuelle, cependant, de sorte que vous devrez peut-être les fusionner avant de pousser avec succès:

git fetch 
git merge origin/master 

vous pouvez alors vous supprimer des branches locales. supprimer avec un petit -d est sûr en ce sens qu'il supprime seulement les branches qui sont les ancêtres de votre branche actuelle.

git branch -d master 
git branch -d refresh. 

Si cela vous dérange que votre branche locale n'est pas appelé maître, vous pouvez maintenant faire:

git checkout -b master 
git branch -d auth_upgrade 
Questions connexes