2010-11-12 3 views
96

J'ai débordé un parent: project à l'enfant: this. Maintenant, je veux mettre à jour mon enfant avec les mises à jour actuelles des parents. Puis-je faire cela, si oui comment? Lorsque je mets à jour mon repo github, je peux faire un "git pull" pour mettre à jour mon repo local.Mettre à jour mon repo github qui est forké d'un autre projet

+0

Vous l'avez en arrière - vous faites votre travail dans votre dépôt local, puis faites pousser git pour mettre à jour la télécommande. – Cascabel

+10

Oui, je comprends cela, mais il y a peu de changements dans le projet original que je dois incorporer dans ma copie de travail. C'est pourquoi j'ai besoin de mettre à jour mon rapport local avec les mises à jour du projet original tout en gardant mes changements de code en local intacts. – zengr

+2

C'est exactement ce que nous avons tous expliqué comment faire. Je fais simplement remarquer que vous ne "mettez pas à jour le repo de github, alors ... tirez pour mettre à jour votre repo local" - vous mettez à jour le repo local, puis vous passez au repo de github. – Cascabel

Répondre

90

Dans votre clone local de l'enfant, tirer de parent, l'ajouter comme une télécommande si vous le souhaitez:

cd child 
git remote add parent <parent-url> 
git pull parent 

L'URL du parent pourrait être le repo github public, ou votre clone local - le clone local sera bien sûr plus rapide. Si vous souhaitez extraire une branche autre que la HEAD actuelle du référentiel parent, ajoutez simplement un argument (par exemple, git pull parent topic-branch). S'il s'agit d'une opération ponctuelle, vous pouvez simplement ignorer l'ajout de la télécommande: git pull <parent-url> [branch]. L'extraction est une combinaison de récupération et de fusion, donc une fois que vous avez fait cela, vous avez un nouveau commit de fusion que vous aurez probablement envie de repasser à votre dépôt public à un moment donné. Le point clé ici, dans le cas où ce n'est pas clair, est que tirer du référentiel parent (en amont) n'est pas différent de tirer de votre clone public de l'enfant, votre référentiel actuel. Quoi qu'il en soit, vous allez chercher dans un dépôt avec un historique commun, et fusionnez-le dans votre branche actuelle. Et bien sûr, puisque vous fusionnez, un arbre de travail est nécessaire - c'est quelque chose qui doit être fait dans votre dépôt local. Le repo hébergé sur github est essentiellement un moyen de publier ce que vous avez fait localement. Tout ce que vous pouvez vraiment faire avec c'est pousser/tirer, et parcourir ce qui est là.

+2

J'ai une erreur 'Vous avez demandé à tirer de la télécommande 'origine', mais n'a pas spécifié de branche. Parce que ce n'est pas la télécommande configurée par défaut pour votre branche actuelle, vous devez spécifier une branche sur la ligne de commande 'quand j'ai fait' git pull parent'. Vous pouvez rapidement le parcourir avec 'git pull parent master'. Ceci est juste une solution si vous travaillez directement dans votre branche principale ou si vous n'avez qu'une seule branche ou si vous n'avez aucune idée de ce qu'est une branche et que vous voulez juste fusionner rapidement. Genre de la solution nouvelle-abeille ou si vous juste une solution rapide pour introduire un petit changement. –

12

Vous voulez:

git pull git://github.com/voldemort/voldemort.git

+0

donc, par cette commande, mon dépôt local sera mis à jour mais qu'en est-il de mon projet enfant sur github? Je vais pousser ça à mon enfant github? – zengr

+0

@zengr: 'git pull' est une combinaison de' git fetch' et 'git merge'.En effet, il fusionne une branche du référentiel distant dans votre branche actuelle. Comme avec tout autre travail que vous faites dans votre dépôt local, pour l'obtenir à la télécommande, vous le poussez. – Cascabel

+0

Comme d'autres l'ont recommandé, 'git remote add parent', en quoi cela diffère-t-il de votre approche de' git pull'? – zengr

15
  1. Clone votre repo à votre machine locale, si vous avez pas déjà: git clone [email protected]:utkarsh2012/voldemort.git
  2. Ajouter l'amont comme une nouvelle télécommande: git remote add upstream git://github.com/voldemort/voldemort.git
  3. Avec votre branche extraite, tirer en amont dans votre branche, qui va créer une fusion entre les deux ensembles de changements: git pull upstream ou git pull upstream branch-to-merge. Si vous travaillez sur une branche non piquée, vous pouvez également utiliser git fetch et git rebase pour rebaser votre travail sans avoir besoin d'une fusion.
3

Cela peut aussi être fait simplement sur l'interface Web de GitHub: délivrer un Pull Demande mais remplacez le repo de base et tête repo. Si la traction peut être effectuée automatiquement, ce sera le cas.

+5

** Attention ** si vous faites cela, il ajoute un commit dans votre projet forké. Donc, vous finissez un engagement avant le projet parent. –

Questions connexes