git pull origin master nie aktualizuje origin / master?

Zgodnie z dokumentacją, git pull wykonuje Git fetch Następnie Git merge, jednak w takim przypadku wykonując git pull origin master powinien wykonać Git fetch origin master prawda? Wydaje się jednak, że tak nie jest. Oto przykład.

Przypuszcza się, że mój remote origin master (w moim przypadku na Githubie) ma następującą historię:

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

I mam tylko mój pierwszy commit lokalnie, wykonując następujące czynności pokazuje

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

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

Stąd robię moje pociągnięcie i patrzę na wyniki w następujący sposób:

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

Jak widać, pull faktycznie zaktualizował moją gałąź master o nowe commity ze zdalnego źródła, ale mój lokalny origin / master nadal jest tam, gdzie był. Zmuszając mnie do wykonania następujących czynności

git fetch origin master

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

Czy jest to poprawne zachowanie dla git pull, czy może mam skonfigurowane coś miss? Przejrzałem stronę podręcznika git pull i nie widziałem niczego, co sugerowałoby to, ale mogłem przegapić to.

Author: Kenneth Baltrinic, 2011-12-31

1 answers

To trochę dziwne, ale jeśli używasz {[2] } to faktycznie nie aktualizuje zdalnych refów. To ma sens, jeśli pomyślisz o tym w określony sposób: ponieważ określasz konkretny ref do pobrania, nie musi on szukać niczego o twoich zdalnych gałęziach, więc z natury nie wie, jaką zdalną gałąź powinien zaktualizować. To oczywiście może to rozgryźć, i nie zdziwiłbym się, gdyby to w końcu zostało naprawione, ale takie jest istniejące zachowanie. (Na liście mailingowej mogą być wiadomości co do tego - nie wiem.)

Można łatwo obejść go, choć. Jeśli używasz git pull origin/master, ponieważ określasz, co ma być pobrane przez zdalną gałąź, powinna ona zaktualizować tę zdalną gałąź. A jeśli i tak znajdujesz się na swojej gałęzi master (lub innej gałęzi śledzącej origin/master), możesz po prostu zrobić git pull i pozwolić mu wypełnić domyślne wartości, a zaktualizuje zdalne gałęzie.

Jest to udokumentowane na stronie podręcznika git-pull, najczęściej pod przykładami, ale także gdzie indziej. Odpowiednie część:

Połącz do bieżącej gałęzi zdalną gałąź następny:

$ git pull origin next

To pozostawia kopię next tymczasowo w FETCH_HEAD, ale nie aktualizuje żadnych gałęzi zdalnego śledzenia. Korzystając ze zdalnego śledzenia gałęzi, to samo można zrobić, wywołując fetch i merge:

$ git fetch origin
$ git merge origin/next
 28
Author: Cascabel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-01-03 01:23:46