Mam dwa pliki zmodyfikowane a
, b
w ostatnim popełnić. Ale b
nie należy zatwierdzać pliku , jaki jest przepływ pracy, aby to zmienić?
Aktualizacja (kilka lat później)
Usunięcie go tylko z indeksu jest banalne.
To prawda: możesz łatwo zresetować plik do zawartości indeksu, jak sugeruje najnowsza odpowiedź (napisana przez Matta Connolly'ego ):
git reset HEAD^ path/to/file/to/revert
HEAD^
pozwala plikowi na dostęp do jego zawartości w poprzednim zatwierdzeniu przed ostatnim.
Więc możesz git commit --amend
, jak pierwotnie napisałem poniżej.
W Git 2.23 (sierpień 2019 r.) Możesz użyć nowego git restore
polecenia
git restore --source=HEAD^ --staged -- path/to/file/to/revert
krótszy:
git restore -s@^ -S -- path/to/file/to/revert
Znowu możesz git commit --amend
, jak pierwotnie napisałem poniżej.
Oryginalna odpowiedź (styczeń 2011 r.)
Jeśli jest to twój ostatni zatwierdzenie (i nigdzie go nie wypchnąłeś), możesz go zmienić :
(pierwszy ukryj lub zapisz b
)
git commit --amend
Następnie usuń b, wprowadź ponownie. Przywróć b i gotowe.
--amend
Służy do zmiany końcówki bieżącego oddziału.
Przygotuj obiekt drzewa, który chcesz jak zwykle zastąpić najnowsze zatwierdzenie (obejmuje to zwykłe ścieżki -i / -o i jawne ścieżki), a edytor dziennika zatwierdzeń jest zapełniany komunikatem zatwierdzenia z końcówki bieżącej gałęzi.
Zatwierdzenie, które utworzysz, zastępuje bieżącą wskazówkę - jeśli była to scalenie, będzie miała rodziców bieżącej wskazówki jako rodziców - więc bieżące górne zatwierdzenie zostanie odrzucone.
... Then stash/delete b, re-commit..
tutaj nie powinnoThen
być słowaafter
? ---amend
po stach / delete b, ...git diff --name-only HEAD^
- (opcjonalnie) użyj, aby wyświetlić listę plików, które zmieniły się w ostatnim zatwierdzeniu.git reset HEAD^ path/to/file/to/revert
- aby zresetować indeks do ostatniej wersji, pozostawiając kopię roboczą nietkniętą.git commit --amend
- zmienić ostatni zatwierdzenie, aby uwzględnić zmiany indeksuźródło
git commit -a --amend
(tzn. Nie dodawać plików) dla kroku 3, w przeciwnym razie dokonasz zmian kopii roboczej, które są zmianami, które próbujesz usunąć. Opcjonalnym krokiem 2.5 może byćgit checkout path/to/file/to/revert
również wyczyszczenie kopii roboczej.git rm --cached path/to/file/to/revert
usunąć plik bez usuwania go z drzewa.Alternatywnie, jeśli używasz
git gui
, po prostu wybierz opcję „Zmień ostatnie zatwierdzenie”, dodany plik pojawi się na liście „Przeniesione”, kliknij jego ikonę, aby przenieść go na listę „Niestabilne” i zatwierdzić.źródło
Jeśli chcesz usunąć b z ostatniego zatwierdzenia
Jeśli chcesz usunąć wszystkie zmiany do b w swoim ostatnim zatwierdzeniu
źródło
git rm --cached
i zrezygnuj z tworzenia kopii zapasowych / przywracania tańca (-1).Alternatywa, która nie wymaga hakowania indeksu, ale zachowuje stary komunikat zatwierdzenia:
Podoba mi się to, ponieważ (a) używa poleceń, których regularnie używam, i (b) mogę zrobić,
git add -p
aby dowiedzieć się dokładnie, co chcę zatwierdzić.źródło