Cofnij do ostatniego zatwierdzenia git


120

Właśnie zrobiłem

git commit -m "blah"

następnie dodałem kilka plików, jak mogę przywrócić i usunąć to, co jest w moich bieżących plikach, które nie zostały jeszcze dodane / zatwierdzone?


15
nie, nie o to prosi OP - jasne jest, że chce cofnąć się do ostatniego zatwierdzenia, a nie cofnąć ostatniego zatwierdzenia. nie powiedział, że dodał kilka plików, a następnie je zatwierdził. więc najwyraźniej chce ostatniego zatwierdzenia.
Paul

1
Trudno jest znaleźć odpowiedź na to bardzo częste pytanie
Sam

Odpowiedzi:


211

Caveat Emptor - Niszczycielskie rozkazy przed nami.

Łagodzenie - git reflog może cię uratować, jeśli tego potrzebujesz.


1) COFNIJ zmiany lokalnego pliku i ZACHOWAJ ostatnie zatwierdzenie

git reset --hard

2) COFNIJ zmiany lokalnego pliku i USUŃ ostatnie zatwierdzenie

git reset --hard HEAD^

3) ZACHOWAJ zmiany w lokalnych plikach i USUŃ ostatnie zatwierdzenie

git reset --soft HEAD^

20
To polecenie usunie poprzednie zatwierdzenie, więc używaj go ostrożnie! reset git
hard

9
WTF robi to jako poprawna odpowiedź z 36 głosami pozytywnymi. Właśnie straciłem dni pracy na to ... ponieważ czytam odpowiedź, a nie komentarz. To nie jest prawidłowa odpowiedź na pytanie!
Chris Nevill

1
OK, nie wszystko stracone! Możesz zrobić git reflog, co pozwoli ci zobaczyć zatwierdzenia wykonane przed resetem. Następnie możesz sprawdzić te zobowiązania
Chris Nevill

3
Co jest warte, zinterpretowałem pytanie OP jako „jak cofnąć zatwierdzenie i usunąć bieżące pliki”, ale było i pozostaje niejednoznaczne. Zrozumiałbym inaczej, gdyby OP po prostu powiedział „jak usunąć bieżące pliki, które nie zostały dodane lub
zatwierdzone

2
Git jest przeciwieństwem stwierdzenia Alana Kaysa. Proste rzeczy powinny być proste, a złożone powinny być możliwe. ... zwłaszcza jego pierwszej części. Mimo to dziękuję za odpowiedź. pomogło.
0xC0000022L

46

Jeśli chcesz usunąć nowo dodane treści i pliki, które są już w fazie przejściowej (czyli dodane do indeksu), użyj:

git reset --hard

Jeśli chcesz usunąć także swoje ostatnie zatwierdzenie (to z komunikatem „bla”), lepiej użyj:

git reset --hard HEAD^

Aby usunąć nieśledzone pliki (czyli nowe pliki, które nie zostały jeszcze dodane do indeksu) i foldery, użyj:

git clean --force -d

czy git reset --hard HEAD ^ usuwa moje ostatnie zatwierdzenie na stałe? nie mogę do tego wrócić?
user137717

wydaje „git czysty --force -d” również usuwa .gitignored foldery
Alexey Timokhin

15

git reset --hard wymusi powrót katalogu roboczego do ostatniego zatwierdzenia i usunie nowe / zmienione pliki.


2
zrobił to, ale pliki nadal tam są. (niezatwierdzone pliki nadal tam są)
Blankman,

w tym przypadku możesz zrobić „git stash”
jacktrade

3
głosowano za, ponieważ jest to jedyna jasna i jednoznaczna odpowiedź na jasne i jednoznaczne pytanie PO.
Paul

4

Możesz cofnąć zatwierdzenie, używając git revert HEAD^do powrotu do przedostatniego zatwierdzenia. Możesz także określić zatwierdzenie do cofnięcia za pomocą id zamiast HEAD ^


To nie „powraca” w sensie, o którym mówisz. Tworzy to odwrotne zatwierdzenie.
Stefan Kendall

4

Jeśli chcesz po prostu cofnąć zatwierdzenie ostatniego zatwierdzenia, użyj tego:

git reset HEAD~

działają dla mnie jak urok.


2
to jest dokładna odpowiedź na pytanie
Deniz Kocaboğa

to powinna być zatwierdzona odpowiedź
amiabl

3

Łatwym i niezawodnym sposobem cofania zmian w pliku lokalnym od ostatniego zatwierdzenia jest umieszczenie ich w nowej gałęzi:

git branch changes
git checkout changes
git add .
git commit

Pozostawia to zmiany w nowej branży. Wróć do oryginalnej gałęzi, aby znaleźć ją z powrotem do ostatniego zatwierdzenia:

git checkout master

Nowa gałąź jest dobrym miejscem do ćwiczenia różnych sposobów cofania zmian bez ryzyka zepsucia oryginalnej gałęzi.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.