Comment fusionner la twig actuelle dans une autre twig

J’ai deux twigs, master et dev. Je travaille toujours sur dev et ne vérifie que le code dans la twig master une fois qu’il a été approuvé pour une utilisation en production. Quand je le fais, je dois faire ce qui suit:

git checkout master git merge dev git checkout dev 

C’est terriblement verbeux, et comme je le fais fréquemment, j’aimerais le minimiser. Existe-t-il une seule commande git que je peux utiliser pour fusionner mon dev de twig actuel avec l’autre maître de twig sans avoir à extraire d’abord la twig principale? Quelque chose peut-être comme:

 git merge dev to master 

serait génial. J’ai parcouru la documentation de git et n’ai rien vu.

1. Ajoutez un alias distant pour votre référentiel local, par exemple:

 git remote add self file:///path/to/your/repository 

(Ou sur windows git remote add self C:\path\to\your\repository )

2. Poussez sur la télécommande, ex:

 git push self dev:master 

La réponse la plus populaire actuellement votée par @zerome est bonne, mais elle est un peu inutile.

Dans la base de votre repository git, vous pouvez simplement faire ceci: git push . dev:master git push . dev:master

Une solution plus généralisée qui fonctionnerait n’importe où dans l’arborescence serait:

 git push $(git rev-parse --show-toplevel) dev:master 

Votre meilleur pari serait d’utiliser un alias, placé dans votre gitconfig global ( ~/.gitconfig ):

 [alias] merge-to = "!f() { git checkout $1 && git merge $2 && git checkout -; }; f" 

afin que vous puissiez l’invoquer depuis n’importe quel repository

 git merge-to master dev 

Une petite modification de l’alias Jefromi qui ne nécessite pas de taper dans la twig actuelle.

Donc, vous l’utilisez comme: git merge-to dev .

Cela basculera sur la twig dev , le fusionnera avec CURRENT et reviendra ensuite.

Par exemple, en supposant que vous soyez sur master twig principale, cela fusionnera le master en dev et vous serez toujours sur le master.

Ça va définitivement à mes dotfiles 🙂

 [alias] merge-to = "!gitmergeto() { export tmp_branch=`git branch | grep '* ' | tr -d '* '` && git checkout $1 && git merge $tmp_branch && git checkout $tmp_branch; unset tmp_branch; }; gitmergeto" 

C’est vieux, mais …

Combinaison des solutions de @ kevin-lyda et @ dmysortingi-nagirniak ci-dessus. cet alias fusionne la twig en cours dans la twig spécifiée. Il utilise la méthode remotes avec et utilise les commandes git pour obtenir le contexte.

 [alias] merge-to = "!gitmergeto() { git push \"`git rev-parse --show-toplevel`\" `git rev-parse --abbrev-ref HEAD`:$1; } && gitmergeto" 

A utiliser comme:

 git merge-to other-branch-name 

Vous venez souvent de la twig dans laquelle vous souhaitez fusionner la twig actuelle. Dans ce cas, vous pourriez faire:

git co - && git merge @{-1}

par exemple:

 git checkout somebranch // (while on master) // add some commits git co - && git merge @{-1} // will merge somebranch into master 

Pour fusionner la twig actuelle dans une autre twig sans extraire l’autre twig:

Fusion rapide

C’est vraiment facile. Par définition, une fusion rapide signifie simplement que le pointeur de twig est déplacé dans l’arborescence de validation. Donc, tout ce que vous avez à faire est de simuler que:

 git branch -f master dev 

Mises en garde: Cela suppose que le master pointe vers un commit qui se trouve également dans la twig dev ou dans une autre twig. Si ce n’est pas le cas, vous risquez de perdre votre travail! Contrairement à la git merge qui créera un commit de fusion (ou une plainte) quand l’avance rapide n’est pas possible, cette méthode force le pointeur de twig à pointer vers un autre commit.

Cela suppose également que vous êtes le seul à travailler sur le référentiel et / ou que vous savez ce que vous faites.

Astuce: Si vous avez effectué une git fetch et que vous avez effectué de nouveaux validations en origin/master , vous pouvez déplacer la twig principale sans extraire en utilisant:

 git branch -f master origin/master 

Fusionner via merger commit

Ce n’est pas toujours possible. Pour créer une validation de fusion, vous devez effectuer une opération de fusion. Et pour faire une opération de fusion, vous devez avoir des commits dans l’autre twig qui ne sont pas dans la twig en cours.

Si vous avez des commits dans la twig master qui ne sont pas dans la twig dev , vous pouvez:

Disclaimer: Ceci est simplement une preuve de concept, juste pour montrer qu’il est parfois possible de faire une fusion avec l’autre twig sans vérifier. Si vous souhaitez l’utiliser tous les jours, vous souhaiterez probablement créer un alias en utilisant la redirection de shell ou en créer un script shell. Ensuite, vous pouvez également créer un script shell pour le processus plus court indiqué dans la question.

 git checkout -b temp git merge --no-ff -e master git branch -f master temp git checkout dev git branch -D temp 

Explication:

  1. Extrayez une twig temporaire qui pointe vers le même commit que la twig actuelle.
  2. Fusionnez master dans la twig temporaire et lancez l’éditeur de message de validation. Si vous voulez que l’engagement de fusion ressemble à la fusion de la twig dev avec master , éditez-le à partir de ceci:

     Merge branch 'master' into temp 

    pour ça:

     Merge branch 'dev' 

    Astuce: Vous pouvez utiliser -m "Merge branch 'dev'" au lieu de -e pour être plus rapide.

  3. Mettez à jour le pointeur de twig master pour qu’il pointe sur la validation de fusion.
  4. Découvrez la twig dev .
  5. Forcer la suppression de la twig temporaire.

Cela touche toujours votre arbre de travail, mais minimalement. Il ne ramène pas l’arborescence à l’état du master origine juste pour apporter à nouveau les changements de développement. Certains peuvent ne pas s’en soucier, mais pour d’autres, cela peut être important.