Zacząłem pracować nad niektórymi plikami, które miałem w podmodule git w ramach innego projektu. Ponieważ jednak był to podmoduł git, nigdy nie wypisał „master”, a zamiast tego po prostu wypisał nagłówek i umieścił wszystkie pliki w folderze w „no branch”.
Teraz, gdy przez przypadek wprowadziłem kilka zmian w tych plikach, właśnie zdałem sobie sprawę, że pracuję w podmodule mojego projektu „bez gałęzi”.
Jak przenieść te pliki do oddziału (np. Master), aby móc je uratować?
git merge $COMMIT_SHA
raz, gdy byłem w innej gałęzi.Stan „bez rozgałęzienia” nazywany jest odłączonym HEAD. Nazywa się to, ponieważ odwołanie HEAD nie jest dołączone do żadnej gałęzi, zamiast tego wskazuje bezpośrednio na zatwierdzenie. Aby dołączyć HEAD do gałęzi, która wskazuje na bieżące zatwierdzenie HEAD, użyj
git checkout -b branchname
.Możesz bezpiecznie zaktualizować istniejący oddział, aby uwzględnić zatwierdzenia w HEAD w następującej sekwencji:
Lub, równoważnie, używając notacji reflog,
HEAD@{1}
aby uniknąć konieczności tworzenia gałęzi tymczasowej:Korzystanie z gałęzi tymczasowej byłoby dobrym pomysłem, jeśli nie zamierzasz wykonywać scalania natychmiast.
Jeśli chcesz wymusić zastąpienie istniejącej gałęzi, aby wskazać zatwierdzenie w HEAD, którego możesz użyć
git branch -f branchname && git checkout branchname
. Jeśli zatwierdzenie w HEAD nie jest oparte na bieżącej końcówce nazwy gałęzi, spowoduje to szybką zmianę nazwy gałęzi, której zwykle chcesz unikać (jest to postrzegane jako historia przepisywania).źródło
Aby dodać do poprzednich odpowiedzi:
Gdy nadal masz odłączony HEAD, możesz dodać tag:
Spowoduje to dodanie tagu do zatwierdzenia, dzięki czemu będzie widoczny w
gitk
innych narzędziach.źródło