J’ai un projet avec plusieurs twigs. Je les ai poussés vers GitHub , et maintenant que quelqu’un d’autre travaille dessus, je dois faire un effort sur GitHub. Cela fonctionne très bien en master. Mais disons que j’ai une twig xyz. Comment puis-je extraire une twig xyz de GitHub et la fusionner dans une twig xyz sur mon hôte local?
J’ai effectivement ma réponse ici: pousser et tirer des twigs dans Git
Mais je reçois une erreur “! [Rejeté]” et quelque chose à propos de “non rapide”.
Aucune suggestion?
Mais je reçois une erreur “! [Rejeté]” et quelque chose à propos de “non rapide”
C’est parce que Git ne peut pas fusionner les modifications des twigs dans votre maître actuel. Supposons que vous ayez extrait le master
twig et que vous souhaitiez fusionner l’ other-branch
twig de la twig distante. Lorsque vous faites cela:
$ git pull origin other-branch
Git fait essentiellement ceci:
$ git fetch origin other-branch && git merge other-branch
C’est-à-dire qu’une pull
est juste une fetch
suivie d’une merge
. Cependant, lorsque vous pull
, Git ne fusionne que les other-branch
s’il peut effectuer une fusion rapide . Une fusion rapide est une fusion dans laquelle le responsable de la twig dans laquelle vous essayez de fusionner est un descendant direct de la tête de la twig que vous souhaitez fusionner. Par exemple, si vous avez cet arbre d’historique, la fusion d’une other-branch
entraînerait une fusion rapide:
OOOOOO ^ ^ master other-branch
Cependant, ce ne serait pas une fusion rapide:
v master OOO \ \-OOOO ^ other-branch
Pour résoudre votre problème, récupérez d’ abord la twig distante:
$ git fetch origin other-branch
Ensuite, fusionnez-le dans votre twig actuelle (je suppose que c’est master
), et corrigez tout conflit de fusion:
$ git merge origin/other-branch # Fix merge conflicts, if they occur # Add merge conflict fixes $ git commit # And commit the merge!
Suivez simplement vos twigs distantes de manière explicite et une simple git pull
fera exactement ce que vous voulez:
git branch -f remote_branch_name origin/remote_branch_name git checkout remote_branch_name
Ou encore plus en accord avec la documentation GitHub sur le forking :
git branch -f new_local_branch_name upstream/remote_branch_name
Vous pouvez tirer une twig vers une twig avec les commandes suivantes.
git pull {repo} {remotebranchname}:{localbranchname} git pull origin xyz:xyz
Lorsque vous êtes sur la twig principale, vous pouvez également vérifier une twig comme:
git checkout -b xyz
Cela crée une nouvelle twig, “xyz”, à partir du maître et la vérifie directement.
Alors vous faites:
git pull origin xyz
Cela amène la nouvelle twig à votre succursale xyz
locale.
Le meilleur moyen est de:
git checkout -b /
Je ne suis pas sûr de bien comprendre le problème, mais tirer une twig existante est fait comme ça (au moins ça marche pour moi 🙂
git pull origin BRANCH
Cela suppose que votre succursale locale est créée à partir de l’origine / BRANCH.
git fetch
va récupérer la dernière liste de twigs.
Maintenant, vous pouvez git checkout MyNewBranch
Terminé 🙂
Pour plus d’informations, voir docs: git fetch
Cela m’a aidé à obtenir une succursale distante avant de la fusionner avec:
git fetch repo xyz:xyz git checkout xyz
git pull
Habituellement, si vous n’avez que le repo assigné à votre code, alors le gitreponame serait l’origine.
Si vous travaillez sur deux référentiels comme l’un est local et un autre distant, vous pouvez vérifier la liste des référentiels depuis git remote -v . Cela montre combien de repo sont assignés à votre code actuel.
BranchName doit exister dans gitreponame correspondant.
vous pouvez utiliser les deux commandes suivantes pour append ou supprimer des repo
git remote add git remote remove
vous pouvez aussi faire
git pull -r origin master
corriger les conflits de fusion le cas échéant
git rebase --continue
-r est pour rebase. Cela vous fera structure de twig de
v master ooooo \ooo ^ other branch
à
v master oooooooo ^ other branch
Cela conduira à une histoire plus propre. Remarque: Si vous avez déjà poussé votre autre twig à l’origine (ou toute autre télécommande), vous devrez peut-être forcer votre twig après le rebase.
git push -f origin other-branch
J’ai fait
git branch -f new_local_branch_name origin/remote_branch_name
Au lieu de
git branch -f new_local_branch_name upstream/remote_branch_name
Comme suggéré par @innaM. Lorsque j’ai utilisé la version amont, il était écrit «fatal: pas un nom d’object valide: ‘upstream / remote_branch_name’ ‘. Je n’ai pas fait git fetch origin
de git fetch origin
comme le suggérait un commentaire, mais simplement remplacé en upstream
par l’ origin
. Je suppose qu’ils sont équivalents.