Skończyło się dzisiaj z odłączoną głową, ten sam problem, jak opisano w: git push mówi wszystko na bieżąco, mimo że mam lokalne zmiany
O ile wiem, nie zrobiłem nic niezwykłego, po prostu zatwierdzam i wypycham z mojego lokalnego repozytorium.
Więc jak skończyłem z detached HEAD
?
branch-name@{n}
n-tej poprzedniej pozycjibranch-name
. Ale nie ważne co, w pewnym momencie musiał byćgit checkout <rev>
. Jeśli to nie zadzwoni, prawdopodobnie zrobiłeś to, o czym wspomniał Will - próbowałeś to zrobićgit checkout <file>
i przez przypadek udało ci się określić poprawkę.git status
:all conflicts fixed: run "git rebase --continue"
git checkout remotes/origin/my-branch
zamiastgit checkout my-branch
lubgit checkout origin/my-branch
.Odpowiedzi:
Każde pobranie zatwierdzenia, które nie jest nazwą jednego z twoich oddziałów, da ci odłączony HEAD. SHA1, który reprezentuje wierzchołek gałęzi, wciąż daje odłączoną GŁOWĘ. Tylko kasa lokalnego oddziału nazwy unika tego trybu.
Zobacz zatwierdzanie z odłączonym HEAD
Na przykład, jeśli kasujesz „zdalną gałąź” bez uprzedniego jej śledzenia, możesz skończyć z odłączonym HEAD.
Zobacz git: przełącz gałąź bez odłączania głowy
Dzięki Git 2.23 (sierpień 2019 r.) Nie musisz już używać mylącego
git checkout
polecenia .git switch
może również sprawdzić oddział i uzyskać odłączenie HEAD, z wyjątkiem:--detach
opcjęWidzieć:
Vs. za pomocą nowego
git switch
polecenia:Jeśli chcesz utworzyć nowy oddział lokalny śledzący oddział zdalny:
Nigdy więcej błędu!
Nigdy więcej niechcianych odłączonych HEAD!
źródło
git commit files creates a new commit containing the contents of the latest commit, plus a snapshot of files taken from the working directory. Additionally, files are copied to the stage.
Co to znaczy „pliki są kopiowane na scenę”? Myślałem, że pliki zostały zatwierdzone, co oznacza, że scena została wyczyszczona?master
jested489
na powyższym schemacie,git checkout ed489
da ci odłączoną GŁOWĘ, podczas gdygit checkout master
nie."You can think of this as an anonymous branch"
:) Podoba mi się analogiaWłaśnie to odtworzyłem przypadkiem:
wyświetla zdalne gałęzie
Chcę sprawdzić jeden lokalnie, więc wycinam wklej:
Presto! Odłączony stan HEAD
Rozwiązanie nr 1:
Nie umieszczaj
origin/
z przodu mojej specyfikacji oddziału podczas sprawdzania:Rozwiązanie nr 2:
Dodaj
-b
parametr, który tworzy gałąź lokalną ze zdalnegogit checkout -b origin/Feature/f1234
lubgit checkout -b Feature/f1234
automatycznie wróci do źródłaźródło
git checkout -b Feature/f1234
<=>git branch Feature/f1234
igit checkout Feature/f1234
.origin/branchname
, szuka,origin/origin/branchname
aby powiedzieć, że pierwsza jest nazwą zdalną, której używasz-b
, jeśli nie tworzyanonymous
gałęzi, która jest odłączona. Podobnie do wyewidencjonowywania z innego pilota musisz wspomnieć o-b
parametrze, w przeciwnym razie git nie będzie wiedział, że pochodzi z nowego pilota, będzie szukałorigin/remote/branchname
.próbować
daje to historię tego, jak twoje HEAD i wskaźniki gałęzi były przenoszone w przeszłości.
np .:
88ea06b HEAD @ {0}: kasa: przejście z DEVELOPMENT do pilotów / origin / SomeNiceFeature e47bf80 HEAD @ {1}: ściągnij origin DEVELOPMENT: Przewijanie do przodu
góra tej listy jest jednym z powodów, dla których można napotkać stan ODŁĄCZONEJ GŁOWICY ... sprawdzanie zdalnej gałęzi śledzenia.
źródło
Może się to łatwo zdarzyć, jeśli spróbujesz cofnąć zmiany dokonane przez ponowne sprawdzenie plików i niezupełne dostosowanie składni.
Możesz spojrzeć na wynik
git log
- możesz wkleić tutaj ogon dziennika od ostatniego udanego zatwierdzenia, a my wszyscy możemy zobaczyć, co zrobiłeś. Lub możesz wkleić-bin i ładnie poprosić#git
na IRC freenode.źródło
Może się to zdarzyć, jeśli masz tag o nazwie takiej samej jak gałąź.
Przykład: jeśli „release / 0.1” to nazwa znacznika, to
tworzy odłączoną HEAD przy „release / 0.1”. Jeśli spodziewasz się, że wersja / 0.1 jest nazwą oddziału, to jesteś zdezorientowany.
źródło
Detached HEAD
oznacza, że to, co obecnie jest wyewidencjonowane, nie jest oddziałem lokalnym.Niektóre scenariusze, które spowodują
Detached HEAD
stan:Powiedzmy, jeśli kasujesz zdalny oddział
origin/master
. To gałąź tylko do odczytu. Tak więc, podczas tworzenia zatwierdzenia zorigin/master
niego będzie on swobodny , tzn. Nie będzie podłączony do żadnej gałęzi.Jeśli kasujesz określony tag lub zatwierdzasz . Podczas wykonywania nowego zatwierdzenia stąd, ponownie będzie on swobodny , tj. Nie będzie podłączony do żadnej gałęzi. Zauważ, że kiedy gałąź jest wyewidencjonowana, nowe zatwierdzenia zawsze są automatycznie umieszczane na końcu.
Jeśli chcesz wrócić i sprawdzić konkretny zatwierdzenie lub znacznik, aby rozpocząć pracę od tego miejsca, możesz utworzyć nową gałąź pochodzącą z tego zatwierdzenia i przejść do niego
git checkout -b new_branch_name
. Zapobiegnie toDetached HEAD
stanowi, ponieważ masz teraz wyewidencjonowany oddział, a nie zatwierdzenie.źródło
Prostym przypadkowym sposobem jest zrobienie
git checkout head
literówkiHEAD
.Spróbuj tego:
co daje
źródło
checkout -b
Które wyglądają jak kasy, ale w rzeczywistości oddziały), ale kolejna lista jest po prostu mile widziana.Innym sposobem na wejście w stan odłączonej głowy git jest próba zatwierdzenia do zdalnej gałęzi. Coś jak:
Pamiętaj, że jeśli to zrobisz, każda kolejna próba sprawdzenia pochodzenia / foo spowoduje powrót do stanu odłączonej głowy!
Rozwiązaniem jest utworzenie własnego lokalnego oddziału foo, który śledzi pochodzenie / foo, a następnie opcjonalnie push.
Prawdopodobnie nie ma to nic wspólnego z twoim pierwotnym problemem, ale ta strona jest wysoko w hitach Google dla „git odłączona głowa”, a ten scenariusz jest poważnie niedokumentowany.
źródło
Kiedy kasujesz do zatwierdzenia
git checkout <commit-hash>
lub do zdalnej gałęzi, HEAD zostanie odłączony i spróbuje utworzyć na nim nowe zatwierdzenie.Zatwierdzenia, które nie są osiągalne przez żaden oddział lub tag, zostaną wyrzucone do pamięci i usunięte z repozytorium po 30 dniach.
Innym sposobem rozwiązania tego jest utworzenie nowej gałęzi dla nowo utworzonego zatwierdzenia i pobranie go.
git checkout -b <branch-name> <commit-hash>
W tym artykule pokazano, jak uzyskać stan odłączonego HEAD .
źródło