Chaque fois que j'ai besoin de fusionner
développer
avec master
, je le fais:
git checkout master
git merge develop
Parfois, j'oublie de quitter le master
. Pour cette raison, j'apporte par erreur des modifications au code alors que je suis toujours sur master
. Cela peut être compliqué. Je me suis engagé à master
plusieurs fois par erreur.
Existe-t-il un moyen de fusionner
avec master
sans passer d'abord à master
?
4 Réponses :
Non.
Je suppose que vous pourriez écrire un petit script shell pour effectuer les trois étapes:
#!/bin/sh set -e git checkout master git merge develop git checkout develop
Vous pouvez également ajouter un git push maître d'origine
avant le dernier paiement.
Si vous voulez faire une fusion réelle dans master, non. Une vraie fusion a besoin, au moins potentiellement, d'un arbre de travail dans lequel travailler. Il utilise également l'index, qui doit correspondre à la branche actuelle à l'extérieur de l'opération (voir la méthode git worktree add
ci-dessous).
Si vous souhaitez effectuer une avance rapide opération (pas une véritable fusion), c'est possible. Par exemple:
git worktree add ../master # NB: assumes ../master is available as a directory name cd ../master git merge feature/X ... # do what it takes to complete the merge here cd - # return to your main repository rm -rf ../master # remove added worktree git worktree prune # clean up list of added worktrees
(notez l'absence de signe +
ou d'option --force
) tentera de transférer votre master
vers le même commit que votre develop
. Utilisez HEAD
pour désigner la branche courante:
! [rejected] [name] -> master (non-fast-forward)
Celles-ci ne fonctionnent que si l'avance rapide est possible. Sinon, vous obtiendrez une erreur de la forme:
git push . HEAD:master
qui vous indique que vous avez besoin d'un arbre de travail dont la branche est master
dans laquelle pour exécuter git merge
.
Pour ce faire sans changer la branche de votre arbre de travail actuel , utilisez git worktree add code >, si votre Git est d'au moins 2,5 (de préférence au moins 2,15). Par exemple, supposons que vous soyez dans le niveau supérieur de votre référentiel, sur la branche
feature/X
:
git push . develop:master
L'arbre de travail ajouté a son propre index (et son propre HEAD
) donc git merge
a maintenant un index et un arbre de travail dans lequel faire son travail, ou laisser son désordre pour que vous le corrigiez, selon ce qui est réellement se produit (voir commentaire de kostix) a>.
J'ajouterais les anecdotes nécessaires: une fusion "réelle" sans utiliser l'arbre de travail (l'extraction) est impossible simplement en raison de la raison pour laquelle une véritable fusion peut entraîner un conflit de fusion qui nécessite 1) une configuration spéciale de la zone de préparation; 2) insérer des marqueurs de conflit dans les fichiers pertinents; 3) interaction humaine pour résoudre les conflits et élaborer l'état de l'index prêt à être validé - pour finaliser la fusion.
Great Post - aimez les détails. git push. HEAD: master
sera ma nouvelle commande fav. Pour référence, si quelqu'un veut une autre façon de dire la même chose, ce blog montre quelques exemples supplémentaires sur la façon de faire des "commits" à avance rapide, sans changer de branche: samuelgruetter.net/blog/2018/08/31/git-ffwd-without-checkout Ce message combiné avec ce blog a clarifié, pour moi, comment utiliser cette variante de commande.
alias git qui fusionne la branche actuelle avec master et retourne à la branche actuelle:
git config alias.merge-to '!f() { !curbr=$(git rev-parse --abbrev-ref HEAD) && destbr="{$1:-master}" && git checkout $destbr && git merge $curbr && git checkout -; }; f'
Appelez-le comme git merge2master
. Pour le rendre complètement paramétré:
git config alias.merge2master '!curbr=$(git rev-parse --abbrev-ref HEAD) && git checkout master && git merge $curbr && git checkout -'
Appelez-le git merge-to
ou git merge-to somebranch
. La valeur par défaut est master
Notez que vous pouvez également utiliser git checkout -
pour revenir en arrière.
Oui, merci! N'achète pas grand-chose car je dois de toute façon calculer curbr
.
Vous pouvez essayer une commande appelée git graft
fourni par git-extras code >
.
Ce n'est pas correctement une commande git, mais git-extras
fournit un tas d'outils pour travailler avec les dépôts git.
Dans votre cas, git graft develop master
peut vous donner le résultat que vous recherchez.