La Réponse Courte
Tant que vous êtes en train de faire une avance rapide de fusion, alors vous pouvez simplement utiliser
git fetch <remote> <sourceBranch>:<destinationBranch>
Exemples:
# Merge local branch foo into local branch master,
# without having to checkout master first.
# Here `.` means to use the local repository as the "remote":
git fetch . foo:master
# Merge remote branch origin/foo into local branch foo,
# without having to checkout foo first:
git fetch origin foo:foo
Tandis que l'Ambre de la réponse va également travailler dans des fast-forward cas, l'utilisation d' git fetch
de cette façon, au contraire, est un peu plus sûr que juste la force-déplacement de la branche de référence, depuis git fetch
sera automatiquement empêcher l'activation accidentelle de la non-avancer rapidement aussi longtemps que vous n'utilisez pas l' +
dans le refspec.
La Réponse Longue
Vous ne pouvez pas fusionner une branche B en direction de Un sans de regarder d'abord si elle entraînerait une non-avance rapide de fusion. C'est parce que d'une copie de travail est nécessaire pour résoudre les conflits potentiels.
Toutefois, dans le cas de fast-forward fusionne, c'est possible, parce que de telles fusions ne peut jamais entraîner dans des conflits qui, par définition. Pour ce faire consulter sans une direction tout d'abord, vous pouvez utiliser git fetch
avec un refspec.
Voici un exemple de la mise à jour de master
(interdisant aux non-avance rapide des changements) si vous avez une autre branche feature
extrait:
git fetch upstream master:master
Ce cas d'utilisation est si commune, que vous aurez probablement envie de faire un alias dans votre fichier de configuration de git, comme celui-ci:
[alias]
sync = !sh -c 'git checkout --quiet HEAD; git fetch upstream master:master; git checkout --quiet -'
Ce que cet alias n'est la suivante:
git checkout HEAD
: cela met votre copie de travail détaché de la tête de l'état. Ceci est utile si vous voulez mettre à jour master
tandis que vous arrive d'être contrôlé. Je pense qu'il était nécessaire de le faire avec parce que sinon, la branche de référence pour l' master
ne bougera pas, mais je ne me souviens pas si c'est vraiment bon de réduction-le-haut de ma tête.
git fetch upstream master:master
: cette avance de votre région master
à la même place qu' origin/master
.
git checkout -
vérifie préalablement extrait de la branche (c'est ce que l' -
dans ce cas).
La syntaxe de l' git fetch
de (non-)avance rapide fusionne
Si vous voulez l' fetch
commande échoue si la mise à jour est non-rapide-vers l'avant, alors il suffit d'utiliser un refspec de la forme
git fetch <remote> <remoteBranch>:<localBranch>
Si vous voulez autoriser les non-avance rapide des mises à jour, puis vous ajoutez un +
à l'avant de la refspec:
git fetch <remote> +<remoteBranch>:<localBranch>
Notez que vous pouvez passer votre local pensions que la "distance" paramètre à l'aide de .
:
git fetch . <sourceBranch>:<destinationBranch>
La Documentation
De la git fetch
documentation qui explique cette syntaxe (l'emphase est mienne):
<refspec>
Le format d'un <refspec>
paramètre est une option de plus +
, suivie par la source ref <src>
, suivie par un colon :
, suivie par la destination ref <dst>
.
La distance ref qui correspond <src>
est rapportée, et si <dst>
n'est pas une chaîne vide, le ref qui correspond à ce rapide est transmis à l'aide de <src>
. Si l'option plus +
est utilisé, la ref est mis à jour, même si elle n'aboutit pas à une avance rapide de mise à jour.
Voir Aussi
Git checkout et de fusion, sans toucher à l'arbre de travail
La fusion sans changer le répertoire de travail