Pracowałem nad gałęzią git i byłem gotowy na zatwierdzenie moich zmian, więc dokonałem zatwierdzenia za pomocą użytecznego komunikatu zatwierdzenia. Następnie z roztargnieniem wprowadziłem niewielkie zmiany w kodzie, które nie są warte zachowywania. Chcę teraz zmienić gałęzie, ale git daje mi,
błąd: masz lokalne zmiany na „X”; nie można przełączać gałęzi.
Czy mogę zmienić oddziały bez zobowiązań? Jeśli tak, jak mogę to skonfigurować? Jeśli nie, jak mogę wyjść z tego problemu? Chcę zignorować drobne zmiany bez zobowiązań i po prostu zmienić gałęzie.
git
branch
git-checkout
Daniel Farrell
źródło
źródło
error: You have local changes to '<filename>'; cannot switch branches.
i gałąź się nie zmieni. możesz zrobić,git checkout -m <branch-name>
aby scalić konflikty i przejść do oddziału i samodzielnie rozwiązać konflikty lubgit checkout -f <branch-name>
zignorować zmiany.Odpowiedzi:
Potrzebujesz czystego stanu, aby zmienić gałęzie. Kasy będą dozwolone tylko wtedy, gdy nie wpłynie to na „brudne pliki” (jak Charles Bailey zauważa w komentarzach).
W przeciwnym razie powinieneś:
reset --hard HEAD
(jeśli nie masz nic przeciwko utracie tych drobnych zmian) lubcheckout -f
(Podczas przełączania gałęzi postępuj, nawet jeśli indeks lub drzewo robocze różni się od HEAD. Służy do odrzucania lokalnych zmian).Lub ostatnio:
git switch
:git switch -f <branch-name>
(
-f
skrót od--force
, który jest aliasem dla--discard-changes
)Różni się to od tego
git switch -m <branch-name>
, który uruchamia trójstronne połączenie między bieżącą gałęzią, zawartością drzewa roboczego, a nową gałęzią jest zrobiona: w ten sposób nie stracisz trwającej pracy.źródło
Jeśli chcesz odrzucić zmiany,
Jeśli chcesz zachować zmiany,
źródło
git stash save
(kiedy pracujesz w oddziale Y), a następniegit checkout branchX
zrób cośgit add/commit -m
itp.git checkout branchY
Igit stash pop
odzyskaj zapasgit stash save
obecnie jest przestarzałe na korzyśćgit stash push
tak powinno być
źródło
git stash
że domyślniegit stash save
Podążać,
źródło
Pamiętaj, że jeśli połączyłeś zdalne oddziały lub masz lokalne zatwierdzenia i chcesz wrócić do zdalnego HEAD, musisz:
HEAD
sam będzie odnosił się tylko do lokalnego zatwierdzenia / scalenia - kilkakrotnie zapomniałem, że kiedy resetuję i kończę na „twoje repozytorium to X zatwierdza do przodu ..”, kiedy w pełni zamierzałem nuke WSZYSTKIE zmiany / zatwierdzenia i powrócić do zdalnej gałęzi .źródło
Jeśli dokonałeś zmian w plikach, które Git musi zmienić również podczas zmiany gałęzi, nie pozwoli ci to. Aby odrzucić działające zmiany, użyj:
Następnie będziesz mógł zmieniać gałęzie.
źródło
Żadna z tych odpowiedzi nie pomogła mi, ponieważ nadal miałem nieśledzone pliki nawet po zresetowaniu i ukryciu. Musiałem zrobić:
źródło
przejście do nowego oddziału tracąc zmiany:
przejście do istniejącej gałęzi tracąc zmiany:
źródło
Łatwa odpowiedź:
jest wymuszenie kasy oddziału
Wymuszanie wyewidencjonowania gałęzi mówi gitowi, aby porzucił wszystkie zmiany dokonane w bieżącej gałęzi i wypisał żądaną.
lub w przypadku sprawdzania zatwierdzenia
Odpowiedź brzmi: nie , to dosłownie filozofia Git, że śledzisz wszystkie zmiany, i że każdy węzeł (tj. Zatwierdzenie) musi być na bieżąco z najnowszymi zmianami, które wprowadziłeś, chyba że oczywiście dokonał nowego zatwierdzenia.
Zdecydowałeś się zachować zmiany?
Następnie schowaj je za pomocą
a następnie, aby odblokować zmiany w wybranej gałęzi, użyj
które zastosują zmiany, ale zachowaj je również w kolejce ukrytych. Jeśli nie chcesz trzymać ich w stosie, ukryj je za pomocą
To jest odpowiednik
apply
i wtedydrop
źródło
Zamknij terminal, usuń folder, w którym znajduje się twój projekt, a następnie sklonuj ponownie swój projekt i voilá.
źródło
reset --hard
!Jeśli chcesz zachować zmiany i zmienić gałąź w poleceniu w jednym wierszu
źródło
Przenieś niezaangażowane zmiany do nowej gałęzi
Utworzyłem
.gitconfig
do tego alias:Aby zmienić
new-branch-name
, użyj:I wszelkie niezaangażowane zmiany plików i indeksów zostaną zachowane.
źródło
git checkout -f twoja_nazwa_gałęzi
jeśli masz problemy z cofnięciem zmian:
jeśli chcesz usunąć nieśledzone katalogi i pliki:
źródło
Aby przejść do innej gałęzi bez zatwierdzania zmian, gdy git skrytka nie działa. Możesz użyć poniższego polecenia:
git checkout -f nazwa-gałęzi
źródło