J'ai deux branches, master et dev. Je travaille toujours sur le développement et je n'enregistre le code dans la branche principale qu'une fois qu'il a été approuvé pour une utilisation en production. Lorsque 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 souvent, j'aimerais le minimiser. Y a-t-il une commande git que je peux utiliser pour fusionner de mon développement de branche actuel vers l'autre branche master sans avoir à vérifier la branche master au préalable? Quelque chose comme peut-être:
git merge dev to master
serait génial. J'ai parcouru la documentation git et je n'ai rien vu.
git
version-control
Chris
la source
la source
git stash
,git checkout master
,git merge dev
,git checkout dev
,git stash pop
.Réponses:
1. Ajoutez un alias distant pour votre référentiel local, par exemple:
(Ou sur windows
git remote add self C:\path\to\your\repository
)2. Appuyez sur la télécommande automatique, ex:
la source
/path/to/your/repository
est le chemin vers votre arbre de travail, c'est-à-dire ne pas inclure le.git
répertoire. De plus, cela devrait aller de soi: la télécommande devra être mise à jour si vous déplacez le dépôt.git remote add self file:///c/projects
revenir avec les notes d'utilisationdev
), puis pousser le commit de fusion en utilisantgit push self dev:master
..
a bien fonctionné pour moi:git push . head:master
.La réponse actuelle la plus votée de @zerome est bonne, mais elle est un peu inutilement verbeuse.
Dans la base de votre dépôt git, vous pouvez simplement faire ceci:
git push . dev:master
Une solution plus généralisée qui fonctionnerait n'importe où dans l'arborescence serait:
la source
git push . dev:master
a beaucoup simplifié ma vie! Meilleure réponse de loin, mercigit push origin dev:master
merge --no-ff
comportement avec cela?git remote add self file:///myRepo
?Votre meilleur pari serait d'utiliser simplement un alias, placé dans votre gitconfig (
~/.gitconfig
) global :afin que vous puissiez l'invoquer depuis n'importe quel référentiel en tant que
la source
&&
, non;
, la fusion échouerait et n'essaierait pas de revenir en arrière. Espérons que l'utilisateur soit suffisamment intelligent pour voir le message «Échec de la fusion» et le traiter.merge-to = "!f() { export tmp_branch=
branche git | grep '*' | tr -d « * »; git checkout $1 && echo git merge $tmp_branch && echo git checkout $tmp_branch; unset $tmp_branch; }; f"
, il me laisse pas de taper dans la branche , je suis actuellement, donc si je veux fusionnerdev
dansmaster
et je suis endev
ce moment , je viens de tapergit merge-to master
merge-to = "!f() { export tmp_branch=`git branch | grep '* ' | tr -d '* '`; git checkout $1 && git merge $tmp_branch && git checkout $tmp_branch; unset $tmp_branch; }; f"
git branch | grep '* ' | tr -d '* '
; git checkout $ 1 && git merge --no-ff $ tmp_branch && git checkout $ tmp_branch; unset tmp_branch;}; f"Une petite modification de l'alias Jefromi qui ne vous oblige pas à taper dans la branche actuelle.
Donc , vous l' utilisez comme:
git merge-to dev
.Cela basculera vers la
dev
branche, la fusionnera avec CURRENT puis reviendra.Par exemple, en supposant que vous soyez sur la
master
branche, cela fusionnera le maître dans dev et vous serez toujours sur le maître.Cela va certainement à mes dotfiles :)
la source
C'est vieux, mais ...
Combinaison des solutions de @ kevin-lyda et @ dmytrii-nagirniak ci-dessus. cet alias fusionne la branche actuelle dans la branche spécifiée. Il utilise la méthode des télécommandes avec et utilise les commandes git pour obtenir le contexte.
A utiliser comme:
la source
Pour fusionner la branche actuelle dans une autre branche sans extraire l'autre branche:
Fusion rapide
C'est vraiment simple. Par définition, une fusion à avance rapide signifie simplement que le pointeur de branche est avancé dans l'arborescence de validation. Il vous suffit donc de simuler cela:
Astuce: Si vous avez effectué un
git fetch
et que vous avez de nouveaux validationsorigin/master
, vous pouvez déplacer lamaster
branche sans extraire en utilisant:Fusionner via la validation de fusion
Ce n'est pas toujours possible. Pour créer une validation de fusion, vous devez effectuer une opération de fusion. Et pour effectuer une opération de fusion, vous devez avoir des commits dans l'autre branche qui ne sont pas dans la branche actuelle.
Si vous avez des commits dans la
master
branche qui ne sont pas dans ladev
branche, vous pouvez:Explication:
Fusionnez
master
dans la branche temporaire et lancez l'éditeur de message de validation. Si vous voulez que le commit de fusion ressemble à ce que vous aviez fusionné ladev
branche dansmaster
, modifiez-la à partir de ceci:pour ça:
Pointe: vous pouvez utiliser à la
-m "Merge branch 'dev'"
place de-e
pour être plus rapide.master
pointeur de branche pour qu'il pointe vers la validation de fusion.dev
succursale.Cela touche toujours votre arbre de travail, mais de manière minimale. Il ne ramène pas l'arborescence à l'état d'origine
master
juste pour apporter à nouveau les changements de développement. Certains peuvent ne pas s'en soucier, mais pour d'autres, cela peut être important.la source
Souvent, vous venez de la branche dans laquelle vous souhaitez fusionner la branche actuelle. Dans ce cas, vous pouvez faire:
git co - && git merge @{-1}
par exemple:
la source
Ma solution est similaire aux autres réponses, avec les différences suivantes:
set -ex
donc chaque commande est imprimée et si la commande échoue, la fonction se termine immédiatementgit merge
: git merge
qui s'assure que la complétion par tabulation fonctionne avec certaines configurations de shell (par exemplegitfast
depuis oh-my-zsh)la source