Często mi się to zdarza: piszę kod, idę, aby sprawdzić moje zmiany, a potem zdaję sobie sprawę, że nie jestem w odpowiednim oddziale, aby sprawdzić te zmiany. Nie mogę jednak przejść do innej gałęzi bez cofnięcia moich zmian. Czy istnieje sposób przeniesienia zmian do innej gałęzi, która ma zostać tam sprawdzona?
422
C:\kf [develop +0 ~4 -0]> git checkout feature/customers<br/> error: Your local changes to the following files would be overwritten by checkout:<br/> AspWebApp.vNext/global.asa<br/> RestApi/Web.config<br/> Please, commit your changes or stash them before you can switch branches.<br/> Aborting
Jeśli zmiany nie zostały jeszcze
git checkout
zatwierdzone , użyj przycisku, aby przejść do nowej gałęzi, a następnie zatwierdzić je normalnie - zmiany w plikach nie są powiązane z konkretną gałęzią, dopóki ich nie zatwierdzisz.Jeśli zmiany zostały już zatwierdzone:
git log
i zapamiętaj SHA zatwierdzenia, które chcesz przenieść.git cherry-pick SHA
podstawiając SHA z góry.git reset HEAD~1
do resetowania przed zatwierdzeniem nieprawidłowej gałęzi.cherry-pick
pobiera dane zatwierdzenie i stosuje je do aktualnie wyrejestrowanej głowy, umożliwiając w ten sposób skopiowanie zatwierdzenia do nowego oddziału.źródło
git reset HEAD~N --soft
a następniegit checkout -b
przenieść cały teraz kod niezakończonej do nowego oddziału.Niestety, zdarza mi się to dość regularnie i używam,
git stash
jeśli wcześniej zdałem sobie sprawę z mojego błędu,git commit
i używamgit cherry-pick
inaczej, oba polecenia wyjaśniono całkiem dobrze w innych odpowiedziachChcę dodać wyjaśnienie dla
git checkout targetBranch
: to polecenie zachowa katalog roboczy i migawkę etapową tylko wtedy, gdy element docelowy ma taką samą historię jak bieżący oddział@ Oświadczenie Amber nie jest fałszywe, kiedy przechodzisz do newBranch , tworzony
git checkout -b newBranch
jest nowy wskaźnik, który wskazuje dokładnie takie samo zatwierdzenie, jak bieżąca gałąź.W rzeczywistości, jeśli zdarzyło Ci się mieć inny oddział, który dzieli historię z bieżącym oddziałem (oba wskazują ten sam zatwierdzenie), możesz „przenieść swoje zmiany” przez
git checkout targetBranch
Jednak zwykle różne gałęzie oznaczają inną historię, a Git nie pozwoli ci przełączać się między tymi gałęziami z brudnym katalogiem roboczym lub obszarem przejściowym. w takim przypadku możesz wykonać
git checkout -f targetBranch
(wyczyścić i usunąć zmiany) lubgit stage
+git checkout targetBranch
(wyczyścić i zapisać zmiany), po prostu uruchomieniegit checkout targetBranch
spowoduje błąd:źródło
Miękki reset git położy Popełnione zmiany z powrotem do indeksu. Następnie sprawdź gałąź, którą zamierzałeś zatwierdzić. Następnie git commit z nową wiadomością zatwierdzenia.
git reset --soft <commit>
git checkout <branch>
git commit -m "Commit message goes here"
Z git docs :
źródło