Czy można cofnąć scenę ostatniej zmiany (bez zatwierdzenia) w git ? Załóżmy, że w bieżącej gałęzi było dużo plików, niektóre z nich zostały ustawione, inne nie. W pewnym momencie jakiś głupi programista przypadkowo wykonał:
git add -- .
...zamiast:
git checkout -- .
Czy ten programista może teraz wprowadzić swoje ostatnie zmiany za pomocą jakiegoś magicznego polecenia git ? A może powinien był popełnić to przed eksperymentowaniem?
git add
polecenia, szczególnie dla plików, które już miały zmiany etapowe i miały pewne zmiany, które miały zostać cofnięte, a nie etapowe. Nie mogę powiedzieć, że drugie pytanie nie jest powiązane.Odpowiedzi:
Możesz użyć
git reset
. Spowoduje to „wycofanie ze sceny” wszystkich plików dodanych po ostatnim zatwierdzeniu.Jeśli chcesz cofnąć scenę tylko z niektórych plików, użyj
git reset -- <file 1> <file 2> <file n>
.Możliwe jest również wycofanie niektórych zmian w plikach za pomocą
git reset -p
.źródło
-p
przełączniku. Dzięki! :)Nie możesz cofnąć ostatniego dodania git, ale możesz cofnąć wszystkie
add
s od ostatniego zatwierdzenia.git reset
bez argumentu zatwierdzenia resetuje indeks (zmiany etapowe etapowe):źródło
reset
użyć pojedynczego pliku lub użyćreset -p
do cofnięcia sceny określonego przystojniaka.Tak więc prawdziwa odpowiedź na
jest w rzeczywistości: Nie, nie można oderwać się od ostatniego
git add
.To znaczy, jeśli interpretujemy to pytanie w następujący sposób:
Plik początkowy:
Pierwsza zmiana, po której następuje
git add
:Druga zmiana, po której następuje
git add
:W tym przypadku
git reset -p
nie pomoże, ponieważ jego najmniejszą ziarnistością są linie.git
nie wie tego o stanie pośrednim:już więcej.
źródło
Możesz użyć
git reset
(zobacz dokumenty )źródło
W dniu git wyświetla się monit:
use "git rm --cached <file>..." to unstage
jeśli pliki nie były w repozytorium. Odsłania pliki, zatrzymując je tam.use "git reset HEAD <file>..." to unstage
jeśli pliki były w repozytorium i dodajesz je jako zmodyfikowane. Utrzymuje pliki takimi, jakie są i rozplanowuje je.O ile mi wiadomo, nie można cofnąć,
git add --
ale można wycofać listę plików, jak wspomniano powyżej.źródło
Usuń plik z indeksu, ale zachowaj jego wersję i pozostaw niezatwierdzone zmiany w kopii roboczej:
Zresetuj plik do ostatniego stanu z poziomu HEAD, cofając zmiany i usuwając je z indeksu:
Jest to potrzebne, ponieważ
git reset --hard HEAD
nie działa z pojedynczymi plikami.Usuń
<file>
z indeksu i wersji, zachowując niewersjonowany plik ze zmianami w kopii roboczej:<file>
Całkowicie usuń z kopii roboczej i wersji:źródło
Jeśli chcesz usunąć wszystkie dodane pliki z git do zatwierdzenia
Jeśli chcesz usunąć pojedynczy plik
źródło
Możesz użyć
aby cofnąć ostatnio dodane pliki lokalne
aby cofnąć zmiany dla określonego pliku
źródło
W zależności od wielkości i skali trudno, możesz utworzyć gałąź scratch (tymczasową) i tam wykonać bieżącą pracę.
Następnie przejdź do oryginalnej gałęzi i sprawdź ją, a następnie wybierz odpowiednie pliki z zatwierdzenia scratch.
Przynajmniej miałbyś stały zapis aktualnych i poprzednich stanów do pracy (do momentu usunięcia tej gałęzi scratch).
źródło