Status mówi ci, że jesteś za wywołanym ref, origin/master
który jest lokalnym ref w twoim lokalnym repozytorium . W takim przypadku ref ma miejsce śledzenie gałęzi w jakimś zdalnym, zwanym origin
, ale status nie mówi ci nic o gałęzi na pilocie. Mówi ci o ref, który jest tylko identyfikatorem zatwierdzenia przechowywanym w twoim lokalnym systemie plików (w tym przypadku zazwyczaj jest to plik zwany .git/refs/remotes/origin/master
w twoim lokalnym repozytorium).
git pull
wykonuje dwie operacje; najpierw wykonuje git fetch
aktualizację zatwierdzeń w zdalnym repozytorium (które aktualizuje origin/master
ref w lokalnym repozytorium), a następnie git merge
łączy te zatwierdzenia z bieżącym oddziałem.
Dopóki nie zrobisz tego fetch
kroku (samodzielnie lub za pośrednictwem git pull
), twoje lokalne repozytorium nie ma sposobu, aby wiedzieć, że istnieją dodatkowe zatwierdzenia w górę, i git status
patrzy tylko na twój lokalny origin/master
ref.
Kiedy git status
mówi „na bieżąco”, oznacza „na bieżąco z odgałęzieniem śledzonym przez bieżący oddział”, co w tym przypadku oznacza „na bieżąco z lokalnym refaktorem o nazwie origin/master
”. To tylko równoznaczne jest z „aktualnym statusem nadrzędnym, który został pobrany po raz ostatni fetch
”, który nie jest tym samym, co „aktualny z aktualnym stanem nadrzędnym”.
Dlaczego to działa w ten sposób? Dobrze fetch
krokiem jest potencjalnie powolna i kosztowna operacja sieciowa. Projekt Git (i innych rozproszonych systemów kontroli wersji ) ma na celu uniknięcie operacji sieciowych, gdy jest to niepotrzebne, i jest zupełnie innym modelem niż typowy system klient-serwer, do którego przywykło wielu ludzi (chociaż, jak wskazano w komentarzach poniżej, koncepcja Gita „zdalnej gałęzi śledzenia”, która powoduje zamieszanie, nie są wspólne dla wszystkich DVCS). Korzystanie z Git w trybie offline jest całkowicie możliwe, bez połączenia ze scentralizowanym serwerem, a wynik działania git status
odzwierciedla to.
Tworzenie i przełączanie gałęzi (i sprawdzanie ich statusu) w Git powinno być lekkie, a nie czymś, co wykonuje powolne operacje sieciowe na scentralizowanym systemie. Założeniem przy projektowaniu Gita i danych git status
wyjściowych było to, że użytkownicy to rozumieją (zbyt wiele funkcji Git ma sens tylko wtedy, gdy wiesz już, jak działa Git). Wraz z przyjęciem Git przez wielu użytkowników, którzy nie znają DVCS, to założenie nie zawsze jest aktualne.
Jest tak, ponieważ Twoje lokalne repozytorium nie zalogowało się za pomocą pilotów. Aby ta praca działała zgodnie z oczekiwaniami, użyj,
git fetch
a następnie uruchomgit status
ponownie.źródło
Chociaż są to realne odpowiedzi, postanowiłem sprawdzić, czy lokalne repozytorium jest zgodne ze zdalnym, bez pobierania lub ciągnięcia. Aby zobaczyć, gdzie są moje gałęzie, używam po prostu:
Zwraca wszystkie bieżące śledzone gałęzie, a co najważniejsze - informacje, czy są one aktualne, przed nimi czy za odległymi źródłami. Po powyższym poleceniu jest to przykład tego, co jest zwracane:
Mam nadzieję, że to komuś pomoże.
źródło
„origin / master” odnosi się do poitingu do zatwierdzenia HEAD oddziału „origin / master”. Odwołanie to przyjazny dla człowieka alias do obiektu Git, zwykle obiektu zatwierdzenia. Odniesienie do „origin / master” jest aktualizowane tylko wtedy, gdy użytkownik korzysta
git push
z pilota ( http://git-scm.com/book/en/v2/Git-Internals-Git-References#Remotes ).Z poziomu katalogu głównego projektu uruchom:
Porównaj wyświetlony identyfikator zatwierdzenia z:
Powinny być takie same i dlatego Git twierdzi, że
master
jest na bieżącoorigin/master
.Kiedy biegniesz
To pobiera nowe obiekty Git lokalnie w folderze .git / objects. A Git aktualizuje .git / FETCH_HEAD, aby teraz wskazywał na ostatnie zatwierdzenie pobranej gałęzi.
Aby zobaczyć różnice między bieżącym oddziałem lokalnym a oddziałem pobranym z góry, możesz uruchomić
źródło
origin/master
referencje również nie są aktualizowane przez pobieranie, a także przez wypychanie?Przyjrzyjmy się przykładowemu repozytorium git, aby sprawdzić, czy
your branch (master)
jestup to date
zorigin/master
.Sprawdź, czy lokalny master śledzi pochodzenie / master:
Więcej informacji o lokalnym oddziale głównym:
Sprawdź, czy origin / master jest na tym samym zatwierdzeniu:
Widzimy wokół siebie ten sam skrót i można śmiało powiedzieć, że gałąź jest spójna ze zdalnym, przynajmniej w bieżącym repozytorium git.
źródło
spróbuj
git add .
wcześniejgit commit
źródło
Trywialna odpowiedź, ale w niektórych przypadkach trafna, na przykład ta, która mnie tu sprowadziła. Pracowałem w repozytorium, które było dla mnie nowe i dodałem plik, który nie był postrzegany jako nowy przez status.
W rezultacie plik pasuje do wzorca w pliku .gitignore.
źródło
w takim przypadku użyj git add i zintegruj wszystkie oczekujące pliki, a następnie użyj git commit, a następnie git push
git add - zintegruj wszystkie pliki pedentów
git commit - zapisz commit
git push - zapisz w repozytorium
źródło