2013-08-05 8 views
16

Pracuję nad oddziałem w git. Kiedy zrobić"git checkout <commit id>" zmienia gałąź na "bez gałęzi"

git checkout <commit id> 

(commit id uzyskanych od git log), to jest coraz zaangażowana w danej zmiany, ale gałąź zostaje zmieniony na <No-branch>.

Dlaczego tak się dzieje? Jak rozwiązać ten problem?

+1

Nie mam dość pytania, czy możesz wkleić sekwencję poleceń i wyjście? – ssedano

+0

Jeśli kasujesz zatwierdzenie, nie jesteś już w żadnej gałęzi (ponieważ powiedziałeś Git, że chcesz być na zatwierdzeniu) – knittl

+0

możliwy duplikat [Jak naprawić Git odłączoną głowę?] (Http://stackoverflow.com/questions/10228760/how-to-fix-a-git-detached-head) i [dlaczego git oddzielił moją głowę?] (Http://stackoverflow.com/questions/3965676/why-did-git-detach-my- głowa). –

Odpowiedz

27

Jeśli dokonasz checkout zatwierdzenia bezpośrednio, wprowadzi cię w stan "odłączonej głowy", co po prostu oznacza, że ​​bieżące sha, które wypisała twoja kopia robocza, nie ma na nim gałęzi wskazującej.

Jeśli nie dokonały jeszcze każdy popełnia, można zostawić wolnostojący stan głowicy wystarczy zaznaczyć się w zależności od tego na oddział byłaś przed sprawdzeniem się commit SHA:

git checkout <branch> 

Jeśli tak uczynić zobowiązuje podczas były w stanie jednorodzinnym głowicy można zapisać swoją pracę po prostu mocowania oddział przed lub podczas zostawić wolnostojący stan głowicy:

# Checkout a new branch at current detached head state: 
git checkout -b newBranch 

Możesz przeczytać więcej o detached head state at the official Linux Kernel Git docs for checkout.

0

Czy to zobowiązanie w innym oddziale? Git checkout <commitid> po prostu przejdzie do innej gałęzi, jeśli zatwierdzenie miało miejsce w innym oddziale. Będziesz chciał scalić zmiany w pierwszej gałęzi, jeśli chcesz mieć tam kod.

1

Jeśli oddział master i zrobić git checkout <SHA>

Jestem prawie pewna, że ​​to powoduje, że git załadować popełnić w detached stanie, zmieniając cię z obecnego oddziału.

Jeśli chcesz wprowadzić zmiany, możesz, a następnie możesz wykonać numer git checkout -b <mynewbranch>, aby utworzyć nowy oddział oparty na tym zatwierdzeniu i wprowadzonych zmianach.

19

Po przejściu do jednego z zatwierdzeń w historii przenosisz swój git do tzw. "Stanu oderwania", który wygląda tak, jak nie chcesz. Użyj tego pojedynczego polecenia, aby utworzyć nowy oddział w jednym z zatwierdzeń z historii:

Powiązane problemy