Proszę, mam duży problem w moim projekcie: taki jest scenariusz. Mam projekt Xcode w ramach GIT. Dzisiaj zdałem sobie sprawę, że ostatnie zatwierdzenie zepsuło niektóre testy, więc sprawdziłem poprzednie zatwierdzenie. Użyłem SourceTree i to jest ostrzeżenie
Spowoduje to, że kopia robocza stanie się „odłączoną GŁOWĄ”, co oznacza, że nie będziesz już na gałęzi. Jeśli po tym chcesz zatwierdzić, prawdopodobnie będziesz chciał ponownie wyrejestrować gałąź lub utworzyć nową gałąź. Czy to jest ok?
Pracowałem cały dzień i na koniec wszystko zobowiązałem. Musiałem więc scalić moją pracę na gałęzi develop, więc wyewidencjonowałem gałąź develop i ... moja praca natychmiast zniknęła :(
Wiem, że odłączenie HEAD było niewłaściwe, a Sourcetree ostrzegło mnie ... ale czy jest sposób, aby przywrócić moją pracę?
Odpowiedzi:
Jeśli wpiszesz
git reflog
, pokaże Ci historięHEAD
wskazanych wersji . Twoja odłączona głowa powinna tam być. Gdy go znajdziesz, zróbgit checkout -b my-new-branch abc123
lubgit branch my-new-branch abc123
(gdzieabc123
jest SHA-1 odłączonej HEAD), aby utworzyć nową gałąź, która wskazuje na twoją odłączoną głowę. Teraz możesz w wolnym czasie scalić tę gałąź.Generalnie, jeśli sprawdzasz gałąź po pracy z odłączoną głowicą, Git powinien poinformować cię o zatwierdzeniu z odłączonej głowy, na którym byłeś, abyś mógł ją odzyskać, jeśli potrzebujesz. Nigdy nie korzystałem z SourceTree, więc nie wiem, czy przekazuje tę wiadomość. Ale jeśli wyświetlił ten komunikat, powinieneś być w stanie go użyć do znalezienia zatwierdzenia i ponownie użyć
git checkout -b
lubgit branch
do utworzenia gałęzi z tego zatwierdzenia.źródło
fatal: A branch named 'mybranch' already exists.
Jak dodać istniejącą gałąź?git cherry-pick e5b2f7b
, gdziee5b2f7b
jest SHA-1 tego zatwierdzenia.W Sourcetree możesz to zrobić za pomocą GUI.
Najpierw znajdź „utracone” zatwierdzenie, szukając wiadomości w historii poleceń (widok: Pokaż wynik polecenia). Prawdopodobnie będzie w poleceniu "Switching Branch" po zatwierdzeniu, które straciłeś. Miejmy nadzieję, że w tej wiadomości zobaczysz komentarz dotyczący zmiany z identyfikatorem zatwierdzenia 1234567.
Przejdź do następnego kroku w tym dokumencie.
Wciśnij przycisk „Rozgałęzienie” na górnym pasku narzędzi, a powinieneś otrzymać okno dialogowe „Nowa gałąź”, w którym możesz określić pewne zatwierdzenie. Umieść tam ten identyfikator zatwierdzenia, podaj nazwę nowej gałęzi, naciśnij Utwórz gałąź, a powinieneś otrzymać nową gałąź z utraconym zatwierdzeniem!
źródło
Jeśli nie chcesz zachować zmian w odłączonym HEAD i chcesz przejść do zatwierdzenia najnowszej gałęzi, użyj bezpośrednio poniższego polecenia.
Uwaga: usunę wszystkie twoje zmiany w odłączonym HEAD.
źródło
Mój kolega właśnie miał taką sytuację. W jego przypadku były zmiany w osobnej głowie - pracują w R-Studio - i narzędzie ostrzegło ich, że mogą stworzyć gałąź z tym i tamtym odwołaniem do SHA ... ale ponieważ jedyną opcją było "Zamknij" - duh !! to była skrzynka informacyjna - zamknęli dialog i stracili informacje na zawsze ...
Dzięki
reflog
poleceniu mogliśmy zobaczyć, że zmiany nie zostały utracone. Ale w naszym przypadkugit branch
nie zadziałało zgodnie z oczekiwaniami ... lub przychodzącegit pull
w jakiś sposób zepsuły. Musieliśmy wyłowić zmiany z refloga na nowo utworzoną gałąź:który umieścił wszystkie zmiany, które chcieliśmy w gałęzi. Wtedy moglibyśmy
develop
bezproblemowo połączyć oddział w .Tylko w przypadku, gdy ma charakter informacyjny dla każdego, my zidentyfikować rewizje na oderwane głowy w
reflog
patrząc na tych, w między oznaczeniem „kasie” (które identyfikują oddział przerzutki):Ci, chcieliśmy były
HEAD@{8}
doHEAD@{6}
(włącznie). Więc mamy je przez:Następnie zwykłe rozwiązywanie scalania i ostateczne zatwierdzanie pozostawiło nam gałąź lost_changes, w której znajduje się praca z odłączoną głowicą, którą uważaliśmy za utraconą. Łączenie tego w program development było tym razem szybkie.
źródło
Wypróbowałem ten scenariusz i stwierdziłem, że git mówi mi SHA-1 o ostatnim zatwierdzeniu:
Widziałeś tę wiadomość?
źródło
git reflog
powinien pokazać ci, czego potrzebujesz.odłączona głowa jest w porządku, o ile chcesz dokonać Bez zmian.
Jeśli chcesz cofnąć zatwierdzenie, możesz użyć git revert na określonej gałęzi
Jeśli chcesz pozbyć się oderwanej głowy i wykonać commity; utwórz nową gałąź (a później połącz ją);
źródło
git reflog
aby wyświetlić historię.git checkout -b temp e35d2b3
tutaj e35dd23 to wartość skrótu twojego zatwierdzenia.Zaakceptuj to jako odpowiedź, jeśli to rozwiąże Twój problem. W przeciwnym razie udostępnij komentarz.
źródło