Właśnie odkryłem i wykorzystałem FETCH_HEAD
. Chciałem lokalną kopię oprogramowania z serwera i zrobiłem to
git fetch gitserver release_1
gitserver
to nazwa mojej maszyny, która przechowuje repozytoria git.
release_1
jest tagiem dla wersji oprogramowania. Ku mojemu zaskoczeniu release_1
nigdzie nie było mnie na mojej lokalnej maszynie. Musiałem pisać
git tag release_1 FETCH_HEAD
aby uzupełnić kopię oznaczonego łańcucha zatwierdzeń (release_1) ze zdalnego repozytorium do lokalnego. Fetch znalazł zdalny znacznik, skopiował zatwierdzenie na mój komputer lokalny, nie utworzył lokalnego znacznika, ale ustawił FETCH_HEAD
wartość zatwierdzenia, aby móc go znaleźć i użyć. Następnie FETCH_HEAD
utworzyłem lokalny tag, który pasował do tagu na pilocie. Jest to praktyczna ilustracja tego, co FETCH_HEAD
jest i jak można go używać, i może być przydatna dla kogoś, kto zastanawia się, dlaczego git fetch nie robi tego, czego naiwnie byś się spodziewał.
Moim zdaniem najlepiej tego unikać, a lepszym sposobem na osiągnięcie tego, co próbowałem zrobić, jest
git fetch gitserver release_1:release_1
tzn. pobrać wersję_1 i nazwać ją lokalnie wersją_1. (Jest to źródło: dest, patrz https://git-scm.com/book/en/v2/Git-Internals-The-Refspec ; na wypadek, gdybyś chciał nadać mu inną nazwę!)
FETCH_HEAD
Czasem możesz chcieć użyć : -
git fetch gitserver bugfix1234
git cherry-pick FETCH_HEAD
może być dobrym sposobem na użycie poprawki numer 1234 z twojego serwera Git i pozostawienie odśmiecania przez Git, aby pozbyć się kopii z serwera, gdy poprawka zostanie wybrana na twój aktualny oddział. (Zakładam, że istnieje ładny, czysty tag zatwierdzający zawierający całą poprawkę błędu na serwerze!)
git fetch origin master
będzie aktualizowanyorigin/master
, nie tylkoFETCH_HEAD
. Zobacz stackoverflow.com/a/20967347/6309