Question Git tire une certaine branche de GitHub


J'ai un projet avec plusieurs branches. Je les ai poussés à GitHub, et maintenant que quelqu'un d'autre travaille sur eux, je dois faire un pull de GitHub. Cela fonctionne bien en maître. Mais disons que j'ai une branche xyz. Comment puis-je extraire une branche xyz de GitHub et la fusionner dans une branche xyz sur mon hôte local?

J'ai en fait ma réponse ici: Pousser et tirer des branches dans Git

Mais je reçois une erreur "! [Rejeté]" et quelque chose à propos de "non rapide en avant".

Aucune suggestion?


443
2017-11-10 16:18


origine


Réponses:


Mais je reçois une erreur "! [Rejeté]" et quelque chose à propos de "non rapide avant"

C'est parce que Git ne peut pas fusionner les changements des branches dans votre maître actuel. Disons que vous avez vérifié la branche masteret vous voulez fusionner dans la branche distante other-branch. Quand vous faites ceci:

$ git pull origin other-branch

Git fait essentiellement ceci:

$ git fetch origin other-branch && git merge other-branch

C'est un pull est juste un fetch suivi d'un merge. Cependant, quand pull-ing, Git sera seulement fusionner other-branch  si il peut effectuer un avance rapide fusionner. UNE avance rapide fusionner est une fusion dans laquelle le chef de la branche que vous essayez de fusionner est un descendante directe de la tête de la branche que vous voulez fusionner. Par exemple, si vous avez cet arbre d'histoire, puis fusionner other-branch entraînerait une fusion rapide:

O-O-O-O-O-O
^         ^
master    other-branch

Cependant, cela ne pas être une fusion rapide:

    v master
O-O-O
\
 \-O-O-O-O
         ^ other-branch

Pour résoudre votre problème, d'abord chercher la branche distante:

$ git fetch origin other-branch

Puis fusionnez-le dans votre branche actuelle (je suppose que master), et corrige les conflits de fusion:

$ git merge origin/other-branch
# Fix merge conflicts, if they occur
# Add merge conflict fixes
$ git commit    # And commit the merge!

520
2017-11-10 19:17



Il suffit de suivre vos branches distantes de manière explicite et 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 le Documentation GitHub sur le forking:

git branch -f new_local_branch_name upstream/remote_branch_name

256
2017-11-10 19:09



Vous pouvez tirer une branche vers une branche avec les commandes suivantes.

git pull {repo} {remotebranchname}:{localbranchname}

git pull origin xyz:xyz

Lorsque vous êtes sur la branche principale, vous pouvez également vérifier une branche comme:

git checkout -b xyz

Cela crée une nouvelle branche, "xyz", du maître et la vérifie directement.

Alors vous faites:

git pull origin xyz

Cela tire la nouvelle branche à votre local xyz branche.


94
2017-11-10 16:28



La meilleure façon est:

git checkout -b <new_branch> <remote repo name>/<new_branch>

70
2018-06-29 06:12



Je ne suis pas sûr de bien comprendre le problème, mais tirer une branche existante est fait comme ça (au moins ça marche pour moi :)

git pull origin BRANCH

C'est en supposant que votre branche locale est créée hors de l'origine / BRANCH.


28
2017-11-10 16:23



git fetch va récupérer la dernière liste de branches.

Maintenant vous pouvez git checkout MyNewBranch 

Terminé :)


Pour plus d'informations, voir docs: git fetch


27
2017-10-14 01:02



Cela m'a aidé à obtenir une succursale distante avant de la fusionner avec:

git fetch repo xyz:xyz
git checkout xyz

7
2018-02-15 21:25



git pull <gitreponame> <branchname>

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 pour l’extérieur, vous pouvez consulter la liste des pensions git à distance -v. Cela montre combien de repo sont assignés à votre code actuel.

BranchName devrait exister dans le gitreponame correspondant.

vous pouvez utiliser les deux commandes suivantes pour ajouter ou supprimer des repo

git remote add <gitreponame> <repourl>
git remote remove <gitreponame>

2
2017-12-08 04:23