web-dev-qa-db-fra.com

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

Selon la documentation, git pull effectue un git fetch puis un git merge, cependant dans ce cas, l'exécution git pull Origin master devrait effectuer un - git fetch Origin master non? Cependant, il ne semble pas que ce soit le cas. Voici un exemple.

Supposons que mon maître d'origine distant (sur GitHub dans mon cas) ait l'historique suivant:

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

et je n'ai que mon premier commit localement comme pour les émissions suivantes

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

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

De là, je fais ma traction 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 principale avec les nouveaux commit de l'origine distante, mais mon origine/maître local est toujours là où il é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 puis-je avoir quelque chose de raté configuré? J'ai parcouru la page de manuel de git pull et je n'ai rien vu qui le suggère, mais je l'ai peut-être manqué.

36
Kenneth Baltrinic

C'est un peu bizarre, mais si vous utilisez git pull [remote] <refspec> il ne met pas à jour les références distantes. Cela a du sens si vous y pensez d'une certaine manière: puisque vous spécifiez une référence spécifique à récupérer, il n'a pas besoin de rechercher quoi que ce soit à propos de vos branches distantes, donc il ne sait pas intrinsèquement quelle branche distante il devrait mettre à jour. Bien sûr, cela pourrait le comprendre, et je ne serais pas surpris s'il finit par être corrigé, mais c'est le comportement existant. (Il peut y avoir des messages sur la liste de diffusion à ce sujet - je ne sais pas.)

Cependant, vous pouvez facilement contourner ce problème. Si tu utilises git pull Origin/master, puisque vous spécifiez ce qu'il faut récupérer via une branche distante, il doit mettre à jour cette branche distante. Et si vous êtes de toute façon sur votre branche principale (ou sur toute autre branche de suivi Origine/maître), vous pouvez simplement faire git pull et laissez-le remplir les valeurs par défaut, et il mettra à jour les branches distantes.

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

Fusionnez dans la branche courante la branche distante suivante:

$ git pull Origin next

Cela laisse temporairement une copie de next dans FETCH_HEAD, mais ne met à jour aucune branche de suivi à distance. En utilisant des branches de suivi à distance, la même chose peut être faite en appelant l'extraction et la fusion:

$ git fetch Origin
$ git merge Origin/next
29
Cascabel

il semble que vous ayez forké le référentiel et que votre branche forkée ne soit pas mise à jour avec le dernier code

0
Nishant Ranjan