J'ai un projet hébergé sur GitHub que quelqu'un a créé. Sur leur fourche, ils ont créé une nouvelle branche "foo" et apporté quelques modifications. Comment puis-je tirer leur "foo" dans une nouvelle branche également appelée "foo" dans mon repo?
Je comprends qu’ils pourraient me soumettre une demande d’attraction, mais j’aimerais lancer ce processus moi-même.
Supposons ce qui suit:
git remote add coworker git://path/to/coworkers/repo.git
git fetch coworker
git checkout --track coworker/foo
Cela va configurer une branche locale foo
, en suivant la coworker/foo
de la branche distante. Ainsi, lorsque votre collègue a apporté des modifications, vous pouvez facilement les extraire:
git checkout foo
git pull
Réponse aux commentaires:
Cool :) Et si je voudrais faire le mien changements à cette branche, devrais-je créer une deuxième "barre" de branche locale de "foo" et y travailler au lieu de directement sur mon "foo"?
Vous n'avez pas besoin de créer une nouvelle branche, même si je le recommande. Vous pouvez aussi vous engager directement dans foo
et demander à votre collègue de tirer votre succursale. Mais cette branche existe déjà et votre branche foo
doit être configurée comme une branche en amont de celle-ci:
git branch --set-upstream foo colin/foo
en supposant que colin
est votre référentiel (distant du référentiel de vos collègues) défini de la même manière:
git remote add colin git://path/to/colins/repo.git
Non, vous n'avez pas besoin de les ajouter en tant que télécommande. Ce serait fastidieux et pénible à faire à chaque fois.
git fetch [email protected]:theirusername/reponame.git theirbranch:ournameforbranch
Cela crée une branche locale nommée ournameforbranch
qui correspond exactement à ce que theirbranch
était pour eux. Pour l'exemple de question, le dernier argument serait foo:foo
.
Remarque: Il est possible d’omettre une partie de :ournameforbranch
si le nom d’un nom qui n’entre pas en conflit avec l’une de vos propres branches vous dérange. Dans ce cas, une référence appelée FETCH_HEAD
est disponible. Vous pouvez git log FETCH_HEAD
voir leurs commits puis faire des choses comme cherry-picked
pour sélectionner leurs commits.
Souvent, vous voulez réparer quelque chose d’eux et le repousser. C'est possible aussi:
git fetch [email protected]:theirusername/reponame.git theirbranch
git checkout FETCH_HEAD
# fix fix fix
git Push [email protected]:theirusername/reponame.git HEAD:theirbranch
Si vous travaillez dans état isolé vous inquiète, créez une branche en utilisant :ournameforbranch
et remplacez FETCH_HEAD
et HEAD
ci-dessus par ournameforbranch
.
Si antak répond:
git fetch [email protected]:<THEIR USERNAME>/<REPO>.git <THEIR BRANCH>:<OUR NAME FOR BRANCH>
vous donne:
Permission denied (publickey).
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
Puis (suivant les conseils de Przemek D) utiliser
git fetch https://github.com/<THEIR USERNAME>/<REPO>.git <THEIR BRANCH>:<OUR NAME FOR BRANCH>
Si le référentiel forké est protégé et que vous ne pouvez pas y accéder directement, et que votre objectif est d'apporter des modifications à leur foo, vous devez alors placer leur branche foo dans votre référentiel comme suit:
git remote add protected_repo https://github.com/theirusername/their_repo.git
git fetch protected_repo
git checkout --no-track protected_repo/foo
Vous avez maintenant une copie locale de foo, sans aucun lien en amont. Vous pouvez y apporter des modifications (ou non), puis poussez votre foo vers votre propre dépôt distant.
git Push --set-upstream Origin foo
Maintenant foo est dans votre dépôt sur GitHub et votre foo local le suit. S'ils continuent à apporter des modifications à foo, vous pouvez aller les chercher et les intégrer à votre foo.
git checkout foo
git fetch protected_repo
git merge protected_repo/foo
GitHub a une nouvelle option par rapport aux réponses précédentes, il suffit de copier/coller les lignes de commande du PR:
Merge
ou Squash and merge
view command line instructions
Ce qui suit est une solution pratique de Nice qui fonctionne avec GitHub pour extraire la branche PR de la branche d’un autre utilisateur. Vous devez connaître l'ID de demande d'extraction (que GitHub affiche avec le titre de PR).
Exemple:
Correction de votre code non sécurisé # 8
alice veut fusionner 1 commit en your_repo:master
à partir de her_repo:branch
git checkout -b <branch>
git pull Origin pull/8/head
Remplacez votre télécommande si elle est différente de Origin
.
Remplacez 8
par le bon ID de demande d'extraction.