git pull origin master ne met pas à jour origin/master?

d'Après la documentation, git pull effectue un git fetch puis un git merge, cependant, dans ce cas, l'exécution git pull origin master doit effectuer un git fetch origin master droit? Cependant, il ne semble pas être le faire. Ici est un exemple.

supposez que mon maître d'origine distant (sur GitHub dans mon cas) a l'histoire suivante:

commit 1111111 : my first commit
commit 2222222 : a commit from someone else

et je n'ai que mon premier commit local comme faire les spectacles suivants

git checkout master
git log --pretty=format:'%h' -n 1
1111111

git checkout origin/master
git log --pretty=format:'%h' -n 1
1111111

A partir de là je fais mon pull et regarde les résultats comme suit:

git checkout master
git pull origin master

git log --pretty=format:'%h' -n 1
2222222

git checkout origin/master
git log --pretty=format:'%h' -n 1
1111111

comme on peut le voir, le pull a en fait mis à jour ma branche master avec les nouveaux commit(s) de l'origine distante, mais mon origine locale/master est toujours là où elle était. Me forçant à faire ce qui suit

git fetch origin master

git checkout origin/master
git log --pretty=format:'%h' -n 1
2222222

ce comportement est-il correct pour git pull ou est-ce que je peux avoir quelque chose qui manque? J'ai regardé dans la page de git pull man et je n'ai pas vu tout ce qui suggérait ceci, mais je l'ai peut-être manqué.

36
demandé sur Kenneth Baltrinic 2011-12-31 19:58:23
la source

1 ответов

C'est un peu bizarre, mais si vous utilisez git pull [remote] <refspec> en fait, il ne met pas à jour les références à distance. Cela a du sens si vous y pensez d'une certaine façon: puisque vous spécifiez un ref spécifique à fetch, il n'a pas besoin de chercher quoi que ce soit sur vos branches distantes, donc il ne sait pas de façon inhérente quelle branche distante il devrait mettre à jour. Il pouvait le comprendre, et je ne serais pas surpris si elle se fixe par la suite, mais c'est le comportement existant. (Il peut y avoir des messages sur le mailing liste sur elle - je ne sais pas.)

Vous pouvez facilement travailler autour d'elle, si. Si vous utilisez git pull origin/master, puisque vous spécifiez quoi récupérer via une branche distante, elle devrait mettre à jour cette branche distante. Et si vous êtes sur votre branche principale de toute façon (ou toute autre branche en traçant l'origine / la branche principale), vous pouvez simplement faire git pull et le laisser remplir les valeurs par défaut, et il mettra à jour les branches distantes.

Ceci est documenté dans le git-pull page de manuel, plus concise sous exemples mais aussi ailleurs. La partie pertinente:

fusionner dans la branche courante la branche distante suivante:

$ git pull origin next

ceci laisse une copie de next temporairement dans FETCH_HEAD, mais ne met pas à jour les branches de suivi à distance. En utilisant les branches de suivi à distance, la même chose peut être faite en invoquant fetch et merge:

$ git fetch origin
$ git merge origin/next
28
répondu Cascabel 2012-01-03 05:23:46
la source

Autres questions sur git github git-pull git-fetch