Czy istnieje polecenie, które pozwala częściowo cofnąć zmiany w pliku (lub plikach) w katalogu roboczym?
Załóżmy, że dużo edytujesz plik, ale zdajesz sobie sprawę, że chcesz cofnąć niektóre zmiany z powrotem do stanu zatwierdzonego, ale nie inne zmiany.
Wyobrażam sobie opcję, git checkout
która działa podobnie git add -p
, tj. Przechodzi przez plik kawałek po kawałku i pyta, czy chcesz go zachować, czy nie.
revert
pozwala wybrać, które zmiany w pliku mają zostać cofnięte ? Szczerze pytam, ponieważ mam doświadczenie tylko z CVS i Git. W Gitgit checkout -- path/to/file
to pojedyncze polecenie, które przywraca wszystkie zmiany w tym pliku, ale nie jest to to samo, co powyżej.git checkout --patch
igit reset --patch
które działa jakgit add --patch
w najnowszym gicie.--
zwykle wskazują koniec parsowania opcji i że wszelkie argumenty, które pojawiają się po nim, mają być interpretowane dosłownie. Oznacza to, że nie musiałbyś dodawać./
przed jakąkolwiek nazwą pliku zaczynającą się od znaku minus, jeśli nazwa pliku następuje po--
.git checkout --patch
różnicy, wydaje się, że jest wstecz. Symbole minus DODAWANIE tekstu do mojej kopii roboczej, a symbole plusa USUWANIE wierszy z kopii roboczej.Z wersją gita> = 1.7.1 mogę
Nie jestem pewien, kiedy ta funkcja została wprowadzona.
źródło
git reset -p
selektywnie odstawić zmiany od obszaru / indeksu. Nie wiem też z góry, w której wersji Gita to zostało wprowadzone.git checkout $file
przywraca stan pliku$file
do ostatniego zatwierdzonego stanu. Myślę, że możesz użyćgit checkout SHA-1 -- $file
do przywrócenia pliku do zatwierdzenia zidentyfikowanego przez SHA-1.źródło
Z ilu zatwierdzeń musisz wrócić i wybrać spośród nich? Jeśli to tylko jeden, może weź gałąź tuż przed nim, wyewidencjonuj zatwierdzony plik, a następnie użyj go,
git add -p
aby dodać go tak, jak chciałeś. Następnie możesz wrócić do miejsca, w którym byłeś i pobrać plik z gałęzi tymczasowej.to jest:
Inne alternatywy obejmują cofnięcie się i edycję zatwierdzenia za pomocą
git rebase -i
(oznaczenie zatwierdzenia jakoedit
, a następnie wykonanie agit reset HEAD^
i ponowne wykonanie zatwierdzenia po wrzuceniu z powrotem do powłoki).Jeśli zmiany, z których musisz dokonać wyboru, są rozłożone na serię zatwierdzeń, może być lepiej wyodrębnić je jako łaty (lub łatkę obejmującą wszystkie z nich) i ręcznie edytować łatkę, usuwając zmiany, które chcesz zachować, i wprowadzanie pozostałości do
git apply --reverse
.źródło