Git tire une certaine twig de GitHub

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.