Jestem nieco zdezorientowany przez polecenia, których używasz. HEAD
jest zwykle git etykiety używa do śledzenia commit, który jest obecnie w katalogu roboczym. Komenda git fetch
oczekuje, że zdalna konfiguracja będzie zdalna, aby wiedzieć, co ma zostać pobrane. Zastosowanie git fetch HEAD
może oznaczać, że HEAD
jest zdalnym w twoim repozytorium. To, że polecenie działało bez błędu, jest ciekawe.
Na przykład: Wyniki git fetch HEAD
w repozytorium Obecnie pracuję w następującym błędem
fatal: 'HEAD' does not appear to be a git repository
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
Komenda git remote
będzie wymienić wszystkie piloty, natomiast git remote --verbose
będzie zawierać adres pilocie. Czy możesz tego użyć, aby sprawdzić, czy zdalny zdefiniowany jako HEAD
i jaki zdalny adresuje repozytorium znajomych?
Jednak moje pytania pomijają i pomagają wyjaśnić swoje zamieszanie. Polecenie git fetch ...
aktualizuje tylko zdalne odwołania - nie lokalne.
Aby było to jasne, zajrzyj do folderu .git w repozytorium (domyślnie jest on ukryty, więc może być konieczne jego odkrycie).Znajdziesz tu strukturę folderów podobną do poniższej
working directory
|=>.git
| |=>objects <= contains data for each commit
| |=>refs
| |=>heads
| |-master <= file containing current commit of local master branch
| |=>remotes
| |=>origin
| |-master <= file containing current commit of remote origin's master branch
|-FETCH_HEAD <= file updated by `git fetch`, contains info of what was fetched
Say kasy oddziału głównego, git checkout master
- git zmieni swój katalog roboczy, aby dopasować dane zobowiązują się w folderze „przedmiotów”, który pasuje do popełnienia wartość w plik ".git/refs/heads/master".
Jeśli następnie git fetch origin master
, plik ".git/refs/remote/origin/master" jest aktualizowany do zatwierdzenia gałęzi głównej na zdalnym miejscu pochodzenia - i wszystkie dane zatwierdzenia potrzebne do pobrania są pobierane i umieszczane w folderze "obiekty".
Ważną kwestią jest tutaj git fetch
nie aktualizuje twojego katalogu roboczego odzwierciedla lokalnego oddziału wyrejestrowanego i git fetch
nigdy nie aktualizuje lokalnego oddziału.
Używanie albo git merge ...
lub git rebase ...
jest potrzebne do aktualizacji lokalnego oddziału master
ze zmianami w origin/master
. git pull ...
wykonuje zarówno git fetch ...
, jak i git merge ...
lub git rebase ...
, w zależności od opcji i konfiguracji (domyślnie jest to git merge ...
).
Po tym wyjaśnieniu, chcesz mieć możliwość sprawdzenia, co - jeśli coś - zostało pobrane z repozytorium znajomych. Polecenie git branch -avv
wyświetli wszystkie lokalne i zdalne gałęzie, z numerami zatwierdzeń, aw przypadku oddziałów lokalnych, jaką zdalną gałąź będzie śledzić.
Aby zobaczyć, jak gałęzie są ze sobą powiązane, pomocne jest narzędzie do wykreślania drzewa repozytoriów. Jest kilka do wyboru, ale uważam, że wystarczające jest polecenie git log
; takie jak git log --all --graph --oneline --decorate
. Uczciwe ostrzeżenie, może być dość długie i skomplikowane dla dużego repozytorium. Krótsze wyjście można uzyskać przez dodanie argumentu --simplify-by-decoration
.
Podsumowując: jeśli możesz to naprawić w domu, zależy to od informacji w twoim repozytorium. Powyższe polecenia; git remote --verbose
, git branch -avv
i git log ...
powinny dać ci zrozumienie obecnego stanu twojego repozytorium. Stamtąd możesz ustalić, czy potrzebujesz czegoś więcej, aby uzyskać dane w lokalnych oddziałach, używając git merge
lub git rebase
.
Jak zawsze, jeśli wpadniesz w kłopoty, opublikuj to, czego się nauczysz.
jest „pochodzenie” współpracowników repo? –
Uwaga: Od git 1.8.4 (sierpień 2013) nie powinieneś już więcej zaskakiwać: 'git fetch origin master' zaktualizuje' origin/master'! Zobacz [moja odpowiedź poniżej] (http://stackoverflow.com/a/20967347/6309) – VonC
Powiązane: [Co oznacza FETCH_HEAD w Git?] (Http://stackoverflow.com/q/9237348/55075) w SO – kenorb