250 votes

Github : Importer la branche amont dans fork

J'ai une fourchette ( origin ) d'un projet ( upstream ) sur github. Maintenant, le projet amont a ajouté une nouvelle branche, que je veux importer dans mon fork. Comment puis-je le faire ?

J'ai essayé de vérifier la télécommande et de créer une branche par-dessus, mais cela configure la branche de la façon dont le fichier git push essaie de pousser à la upstream :

git checkout upstream/branch
git checkout -b branch

modifier

Peut-être que ce n'était pas clair, mais je veux ajouter la branche à mon dépôt local, afin que je puisse la pousser vers origin (ma fourchette) via git push . Parce que les dépôts amont sont généralement en lecture seule et qu'il faut bifurquer pour contribuer.

Donc je veux essentiellement vérifier une branche inexistante sur origin dont le contenu sera tiré de upstream .

369voto

urschrei Points 4690
  1. Assurez-vous que vous avez retiré le nouveau en amont dans votre repo local :

    • D'abord, assurez-vous que votre arbre de travail est propre (commit/stash/revert de tout changement)
    • Ensuite, git fetch upstream pour récupérer la nouvelle branche amont
  2. Créer et passer à un version locale de la nouvelle branche amont ( newbranch ) :

    • git checkout -b newbranch upstream/newbranch
  3. Lorsque vous êtes prêt à pousser la nouvelle branche vers origine :

    • git push -u origin newbranch

El -u met en place le suivi vers la télécommande spécifiée (dans cet exemple, origin )

7 votes

Je crois git fetch upstream est une meilleure option à la première étape, puisque git pull upstream exige que d'autres actions soient effectuées après git remote add ... pour le upstream .

0 votes

Git pull upstream retourne : You asked to pull from the remote 'upstream', but did not specify a branch. Because this is not the default configured remote for your current branch, you must specify a branch on the command line. L'ajout du nom de la branche à la fin de la commande provoque une fusion entre la branche en amont et la branche locale actuelle au lieu de permettre la création d'une nouvelle branche locale. Des idées ?

1 votes

Remplacement de git pull upstream con git fetch upstream a résolu le problème, et les étapes suivantes ont fonctionné.

11voto

Ian Will Points 356

J'ai eu des problèmes avec ça aussi, et google m'a amené ici. Les solutions n'ont cependant pas fonctionné. Mon problème était que lorsque j'ai ajouté mon amont, il a configuré ma configuration git pour ne récupérer que le master, plutôt que toutes les branches. Par exemple, cela ressemblait à ceci

[remote "somebody"]
        url = git@github.com:somebodys/repo.git
        fetch = +refs/heads/master:refs/remotes/upstream/master

L'édition de .git/config comme suit a réglé mon problème

[remote "somebody"]
        url = git@github.com:somebodys/repo.git
        fetch = +refs/heads/*:refs/remotes/upstream/*

9voto

Svenito Points 345

J'utiliserais

git checkout -b <new_branch> upstream/<new_branch>

0 votes

C'est en fait ce que j'ai essayé avant même ce que j'ai expliqué dans la question ; cela conduit aux mêmes résultats.

3voto

okor Points 98

J'avais un scénario un peu plus compliqué où j'avais déjà une upstream défini dans mon fork (à partir du repo canonique) mais j'avais besoin d'extraire une branche d'un fork différent. Pour ce faire, le processus est légèrement différent. Voici la configuration avec laquelle je me suis retrouvé :

[remote "origin"]
url = git@github.com:<your_user/org>/<repo>.git
fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
remote = origin
merge = refs/heads/master
rebase = true
[remote "upstream"]
url = git@github.com:<upstream_user>/<repo>.git
fetch = +refs/heads/*:refs/remotes/upstream/*
[remote "other_user"]
url = git@github.com:<other_user>/<repo>.git
fetch = +refs/heads/*:refs/remotes/<other_user>/*

Vous pouvez maintenant extraire une branche de <other_user> fourche également.

git fetch <other_user> <branch>
git checkout -b <branch> <other_user>/<branch>

Cela vous donnera une branche locale qui est dérivée de la fourche.

Pour pousser cette branche locale, j'ai dû être spécifique avec ma commande push.

git push origin <branch>

2voto

Eneko Alonso Points 2970

Les étapes suivantes ont bien fonctionné pour moi (en supposant que le nom de la branche amont est branch ):

$ git fetch upstream
$ git checkout branch
$ git push origin

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X