Odpowiedzi:
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.
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 indeksugit 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ć.
Jeśli chcesz usunąć b z ostatniego zatwierdzenia
git rm --cached b (will preserve the file in the working tree but remove it from the index)
git commit --amend
Jeśli chcesz usunąć wszystkie zmiany do b w swoim ostatnim zatwierdzeniu
(backup b)
(modify b to state before incorrect commit)
git commit --amend
(restore b)
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:
$ git reset HEAD^
$ git add <all the files you want, excluding the one you don't want>
$ git commit -C HEAD@{1}
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ć.
... Then stash/delete b, re-commit..
tutaj nie powinnoThen
być słowaafter
? ---amend
po stach / delete b, ...