Jak cofnąć ostatnie commity lokalne w Git?

Przypadkowo zatwierdziłem błędne pliki do Git , ale nie wcisnąłem jeszcze commita na serwer.

Jak mogę cofnąć te commity z lokalnego repozytorium ?

Author: Peter Mortensen, 2009-05-29

30 answers

Undo a commit & redo

$ git commit -m "Something terribly misguided" # (0: Your Accident)
$ git reset HEAD~                              # (1)
[ edit files as necessary ]                    # (2)
$ git add .                                    # (3)
$ git commit -c ORIG_HEAD                      # (4)
  1. Ta komenda jest odpowiedzialna za undo. Spowoduje to cofnięcie ostatniego commita, gdy pozostawi drzewo robocze (Stan plików na dysku) nietknięte. musisz dodać je ponownie, zanim będziesz mógł je ponownie zatwierdzić).

  2. Wprowadzić poprawki do plików drzewa roboczego.

  3. git add wszystko, co chcesz umieścić w nowym commicie.

  4. Zatwierdź zmiany, ponowne użycie starej wiadomości commit. reset skopiowałem starą głowę do .git/ORIG_HEAD; commit za pomocą -c ORIG_HEAD otworzy się edytor, który początkowo zawiera komunikat dziennika ze starego commita i pozwala na jego edycję. Jeśli nie musisz edytować wiadomości, możesz użyć opcji -C.

Alternatywnie, aby edytować poprzedni commit (lub tylko jego komunikat commit), commit --amend doda zmiany w bieżącym indeksie do poprzedniego zatwierdzenia.

Aby usunąć (nie przywrócić) commit który został wypchnięty na Serwer , konieczne jest przepisanie historii za pomocą git push origin master --force.


Czytaj Dalej

Jak mogę wrócić do poprzedniej lokalizacji? (Odłączona Głowica) & Undo commits

Powyższa odpowiedź pokaże Ci git reflog, której możesz użyć do określenia SHA-1 dla commitu, do którego chcesz powrócić. Po uzyskaniu tej wartości użyj sekwencji poleceń, jak wyjaśniono powyżej.


HEAD~ jest tym samym co HEAD~1. Artykuł Co to jest głowa w git? jest pomocna, jeśli chcesz anulować wiele commitów.

 24217
Author: Mark Amery,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-12-21 16:53:10

Cofnięcie commita jest trochę przerażające, jeśli nie wiesz, jak to działa. Ale to jest naprawdę niezwykle łatwe, jeśli rozumiesz. Pokażę Ci 4 różne sposoby na cofnięcie commita.

Wariant 1: git reset --hard

Powiedzmy, że masz to, gdzie C to twoja głowa i (F) to stan twoich plików.

   (F)
A-B-C
    ↑
  master

Chcesz Nuke zatwierdzić C i nigdy więcej go nie zobaczyć i stracić wszystkie zmiany w lokalnie zmodyfikowanych plikach . Robisz to:

git reset --hard HEAD~1

Wynik jest:

 (F)
A-B
  ↑
master
Teraz B jest głową. Ponieważ użyłeś --hard, Twoje pliki są resetowane do ich stanu w commit B.]}

Wariant 2: git reset

Ah, ale załóżmy, że commit C nie był katastrofą, ale tylko trochę wyłączony. Chcesz cofnąć commit, ale Zachowaj zmiany na trochę edycji, zanim zrobisz lepszy commit. Od tej chwili możesz przypisać do domeny hosting, wybierając usługę dostosowaną do Twoich potrzeb:]}
   (F)
A-B-C
    ↑
  master

Możesz to zrobić, pozostawiając --hard:

git reset HEAD~1

W tym przypadku wynik jest:

   (F)
A-B-C
  ↑
master

W obu przypadkach HEAD jest tylko wskaźnikiem do ostatniego commita. Kiedy wykonujesz git reset HEAD~1, mówisz Gitowi, aby przesunął wskaźnik głowy do tyłu o jeden commit. Ale (chyba że użyjesz --hard) zostawiasz swoje pliki takie, jakie były. Więc teraz git status pokazuje zmiany, które zarejestrowałeś w C. nic nie straciłeś!

Wariant 3: git reset --soft

Aby uzyskać najlżejszy dotyk, możesz nawet cofnąć zatwierdzenie, ale pozostawić swoje pliki i indeks :

git reset --soft HEAD~1

To nie tylko zostawia Twoje pliki w spokoju, nawet twój indeks zostaje w spokoju. Gdy wykonasz git status, zobaczysz, że w indeksie znajdują się te same pliki, co poprzednio. W rzeczywistości, zaraz po tej komendzie, możesz zrobić git commit i ponownie wykonać ten sam commit, który właśnie miałeś.

Opcja 4: zrobiłeś git reset --hard i musisz odzyskać ten kod

Jeszcze jedno: Załóżmy, że zniszczysz commit tak jak w pierwszym przykładzie, ale potem odkryjesz, że potrzebujesz go mimo wszystko ? Pech, prawda?

Nie, jest nadal sposób, aby go odzyskać. Wpisz git reflog, a zobaczysz listę (częściowych) commitów shas (czyli hashów), w których się poruszałeś. Znajdź commit, który zniszczyłeś i zrób to:]}

git checkout -b someNewBranchName shaYouDestroyed

Wskrzesiłeś ten commit. Commity nie są niszczone w Git przez jakieś 90 dni, więc zazwyczaj możesz wrócić i uratować jedną, której nie chciałeś się pozbyć.

 11156
Author: Ryan Lundy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-10-09 17:53:06

Są dwa sposoby na "cofnięcie" ostatniego commita, w zależności od tego, czy został on już upubliczniony (przeniesiony do zdalnego repozytorium):

Jak cofnąć lokalny commit

Powiedzmy, że zaangażowałem się lokalnie, ale teraz chcę usunąć ten commit.

git log
    commit 101: bad commit    # Latest commit. This would be called 'HEAD'.
    commit 100: good commit   # Second to last commit. This is the one we want.

Aby przywrócić wszystko do stanu sprzed ostatniego commita, musimy reset zmienić commit przed HEAD:

git reset --soft HEAD^     # Use --soft if you want to keep your changes
git reset --hard HEAD^     # Use --hard if you don't care about keeping the changes you made

Teraz git log pokaże, że nasz ostatni commit został usunięty.

Jak aby cofnąć commit publiczny

Jeśli już upubliczniłeś swoje commity, będziesz chciał utworzyć nowy commit, który "przywróci" zmiany wprowadzone w poprzednim commicie (bieżącym HEAD).

git revert HEAD

Twoje zmiany zostaną teraz przywrócone i gotowe do zatwierdzenia:

git commit -m 'restoring the file I removed by accident'
git log
    commit 102: restoring the file I removed by accident
    commit 101: removing a file we don't need
    commit 100: adding a file that we need

Aby uzyskać więcej informacji, sprawdź Git Basics - cofanie rzeczy.

 2272
Author: Andrew,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-06-20 09:12:55

Dodaj/usuń pliki, aby uzyskać rzeczy tak, jak chcesz:

git rm classdir
git add sourcedir

Następnie zmień commit:

git commit --amend

Poprzedni, błędny commit zostanie edytowany, aby odzwierciedlić nowy stan indeksu - innymi słowy, będzie to tak, jakbyś nigdy nie popełnił błędu.

Zauważ, że powinieneś to zrobić tylko wtedy, gdy jeszcze nie naciskałeś. Jeśli popchnąłeś, będziesz musiał normalnie wprowadzić poprawkę.

 1793
Author: bdonlan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-10-12 06:45:55
git rm yourfiles/*.class
git commit -a -m "deleted all class files in folder 'yourfiles'"

Lub

git reset --hard HEAD~1

Ostrzeżenie: powyższe polecenie trwale usunie modyfikacje .java plików (i wszystkich innych plików), które chcesz zatwierdzić.

hard reset do HEAD-1 ustawi twoją kopię roboczą na stan commita przed błędnym commitem.

 1070
Author: Lennart Koopmann,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-12-13 22:03:28

Aby zmienić ostatni commit

Zastąp pliki w indeksie:

git rm --cached *.class
git add *.java

Wtedy, jeśli jest to prywatna gałąź, Zmień commit:

git commit --amend

Lub, jeśli jest to współdzielona gałąź, utwórz nowy commit:

git commit -m 'Replace .class files with .java files'


(aby zmienić poprzedni commit, użyj awesome interactive rebase.)


ProTip™: Dodaj *.classdo gitignore , aby powstrzymać to ponownie.


Aby przywrócić a commit

Zmiana commita jest idealnym rozwiązaniem, jeśli chcesz zmienić ostatni commit, ale bardziej ogólnym rozwiązaniem jest reset.

Możesz zresetować Git do dowolnego commita używając:

git reset @~N

Gdzie N jest liczbą commitów przed HEAD, a @~ resetuje się do poprzedniego commita.

Więc zamiast zmieniać commit, możesz użyć:

git reset @~
git add *.java
git commit -m "Add .java files"

Zobacz git help reset, a konkretnie sekcje na --soft --mixed i --hard, dla lepszego zrozumienia tego, co to tak.

Reflog

Jeśli nawalisz, zawsze możesz użyć reflogu, aby znaleźć odrzucone commity:

$ git reset @~
$ git reflog
c4f708b HEAD@{0}: reset: moving to @~
2c52489 HEAD@{1}: commit: added some .class files
$ git reset 2c52489
... and you're back where you started


 821
Author: Zaz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-11-21 13:40:42

Użyj git revert <commit-id>.

Aby uzyskać identyfikator zatwierdzenia, użyj git log.

 726
Author: Jaco Pretorius,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-11-21 13:47:43

Jeśli planujesz całkowicie cofnąć lokalny commit, cokolwiek zmieniłeś w commicie i jeśli nie martwisz się o to, wykonaj następujące polecenie.

git reset --hard HEAD^1

(ta komenda zignoruje cały commit, a zmiany zostaną całkowicie utracone z lokalnego drzewa roboczego). Jeśli chcesz cofnąć swój commit, ale chcesz, aby zmiany w obszarze przejściowym (przed commitem, tak jak po git add), wykonaj następujące polecenie.

git reset --soft HEAD^1

Teraz twój oddany / align = "left" / Załóżmy, że jeśli chcesz zwiększyć scenę plików, ponieważ musisz edytować niewłaściwą zawartość, wykonaj następujące polecenie

git reset HEAD

Teraz zatwierdzono pliki, które mają pochodzić z obszaru zainscenizowanego do obszaru nieakcentowanego. Teraz pliki są gotowe do edycji, więc cokolwiek zmienisz, chcesz je edytować, dodać i wprowadzić nowy commit.

Więcej (link uszkodzony) (Wersja archiwalna )

 577
Author: Madhan Ayyasamy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-11-21 14:11:02

Jeśli masz zainstalowane Git Extras , możesz uruchomić git undo, aby cofnąć najnowszy commit. git undo 3 cofnie ostatnie trzy commity.

 537
Author: nickf,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-11-21 13:46:26

Chciałem cofnąć ostatnie pięć commitów w naszym współdzielonym repozytorium. Sprawdziłem identyfikator wersji, do którego chciałem się wycofać. Następnie wpisałem następujące.

prompt> git reset --hard 5a7404742c85
HEAD is now at 5a74047 Added one more page to catalogue
prompt> git push origin master --force
Total 0 (delta 0), reused 0 (delta 0)
remote: bb/acl: neoneye is allowed. accepted payload.
To [email protected]:thecompany/prometheus.git
 + 09a6480...5a74047 master -> master (forced update)
prompt>
 499
Author: neoneye,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-11-21 13:47:00

Wolę używać git rebase -i do tego zadania, ponieważ wyskakuje Ładna lista, gdzie mogę wybrać commity, których chcę się pozbyć. To może nie być tak bezpośrednie, jak niektóre inne odpowiedzi tutaj, ale to po prostu wydaje się właściwe .

Wybierz liczbę commitów, które chcesz wyświetlić, a następnie wywołaj w ten sposób (aby zapisać trzy ostatnie)

git rebase -i HEAD~3

Przykładowa lista

pick aa28ba7 Sanity check for RtmpSrv port
pick c26c541 RtmpSrv version option
pick 58d6909 Better URL decoding support

Wtedy Git usunie commity dla każdej linii, którą usuniesz.

 472
Author: Steven Penny,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-12-06 21:59:20

Jak naprawić poprzedni lokalny commit

Użyj git-gui (lub podobnego), aby wykonać git commit --amend. Z GUI można dodawać lub usuwać pojedyncze pliki z zatwierdzania. Możesz również zmodyfikować wiadomość zatwierdzającą.

Jak cofnąć poprzedni lokalny commit

Wystarczy zresetować gałąź do poprzedniej lokalizacji (na przykład używając gitk lub git rebase). Następnie ponownie zastosuj zmiany z zapisanej kopii. Po zbieraniu śmieci w lokalnym repozytorium, będzie to jak niechciany commit nigdy stało się. Aby zrobić to wszystko za pomocą jednego polecenia, użyj git reset HEAD~1.

Słowo ostrzeżenia: nieostrożne użycie git reset jest dobrym sposobem na wprowadzenie kopii roboczej w stan dezorientacji. Polecam, aby nowicjusze Gita unikali tego, jeśli mogą.

Jak cofnąć publiczny commit

Wykonaj odwrócony wybór wiśni (git-revert ) aby cofnąć zmiany.

Jeśli nie ściągnąłeś jeszcze innych zmian na swoją gałąź, możesz po prostu zrób...

git revert --no-edit HEAD

Następnie wypchnij zaktualizowaną gałąź do udostępnionego repozytorium.

historia zmian pokaże oba commity, osobno .


Zaawansowane: korekta gałęzi prywatnej w repozytorium publicznym

To może być niebezpieczne-upewnij się, że masz lokalną kopię gałęzi do przepuszczenia.

uwaga: nie chcesz tego robić, jeśli ktoś inny może pracować nad tą gałęzią.

git push --delete (branch_name) ## remove public version of branch

Clean up Twój oddział lokalnie następnie repush...

git push origin (branch_name)

w normalnym przypadku prawdopodobnie nie musisz się martwić, że historia zmian w prywatnych gałęziach będzie nieskazitelna. Po prostu naciśnij commit (zobacz "jak cofnąć commit publiczny" powyżej), a później wykonaj squash-merge, aby ukryć historię.

 449
Author: nobar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-12-07 05:57:27

Jeśli chcesz to trwale cofnąć i sklonowałeś jakieś repozytorium

Identyfikator zatwierdzenia może być widoczny przez

git log 

Wtedy możesz zrobić-

git reset --hard <commit_id>

git push origin <branch_name> -f
 361
Author: poorva,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-24 09:34:15

Jeśli popełniłeś śmieci, ale nie pchnąłeś,

git reset --soft HEAD~1

HEAD~1 jest skrótem od commit przed head. Alternatywnie możesz odwołać się do SHA-1 skrótu, jeśli chcesz zresetować. --soft opcja usunie commit, ale pozostawi wszystkie Twoje zmienione pliki "zmiany do zatwierdzenia", jak to określiłby git status.

Jeśli chcesz pozbyć się zmian w śledzonych plikach w drzewie roboczym od commit przed head use "--hard " zamiast tego.

Lub

Jeśli już nacisnąłeś i ktoś pociągnął, co zwykle jest w moim przypadku, nie możesz użyć git reset . Możesz jednak wykonać git revert,

git revert HEAD

Utworzy to nowy commit, który odwróci wszystko wprowadzone przez przypadkowy commit.

 358
Author: santos_mgr,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-09-25 07:58:25

Na SourceTree (GUI dla GitHub), możesz kliknąć prawym przyciskiem myszy commit i wykonać 'Reverse Commit'. To powinno cofnąć zmiany.

Na terminalu:

Można alternatywnie użyć:

git revert

Lub:

git reset --soft HEAD^ # Use --soft if you want to keep your changes.
git reset --hard HEAD^ # Use --hard if you don't care about keeping your changes.
 307
Author: Varun Parakh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-24 09:34:11

Jedno polecenie:

git reset --soft 'HEAD^' 

Świetnie sprawdza się cofnięcie ostatniego lokalnego commita!

 287
Author: Manish Shrivastava,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-07-21 20:13:34

Wystarczy go zresetować wykonując poniższą komendę używając git:

git reset --soft HEAD~1

Wyjaśnij: co robi git reset, jest to w zasadzie reset do każdego commita, do którego chcesz wrócić, wtedy jeśli połączysz go z --soft kluczem, to powróci, ale zachowasz zmiany w Twoich plikach, więc wrócisz do etapu, na którym plik został dodany, HEAD jest głową gałęzi i jeśli połączysz się z ~1 (w tym przypadku użyjesz również HEAD^), powróci tylko jeden commit, który chcesz...

I Utwórz kroki na poniższym obrazku, aby uzyskać więcej szczegółów, w tym wszystkie kroki, które mogą się wydarzyć w rzeczywistych sytuacjach i zatwierdzić kod:

Jak cofnąć ostatnie commity w Git?

 273
Author: Alireza,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-27 12:46:34

Jak cofnąć ostatni commit Git?

Aby przywrócić wszystko do stanu sprzed ostatniego commita, musimy zresetować do commita przed HEAD.

  1. Jeśli nie chcesz zachować wprowadzonych zmian:

    git reset --hard HEAD^
    
  2. Jeśli chcesz zachować swoje zmiany:

    git reset --soft HEAD^
    

Teraz sprawdź swój git log. Pokaże, że nasz ostatni commit został usunięty.

 253
Author: Ranjithkumar Ravi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-25 08:14:01

"Zresetuj działające drzewo do ostatniego commita"

git reset --hard HEAD^ 

"Wyczyść nieznane pliki z drzewa roboczego"

git clean    

See - Git Quick Reference

Uwaga: to polecenie usunie poprzedni commit, więc używaj go ostrożnie! Jest bezpieczniejsze.

 209
Author: Ravi_Parmar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-12-13 16:39:46

Użyj reflog, aby znaleźć poprawny stan

git reflog

reflog przedREFLOG PRZED RESETEM

Wybierz poprawny reflog (w moim przypadku f3cb6e2) i wpisz

git reset --hard f3cb6e2

Po tym nagłówku repo zostanie zresetowany do tego nagłówka efekt resetowaniaLOG PO RESECIE

Wreszcie reflog wygląda jak na poniższym obrazku

reflog poREFLOG FINAL

 201
Author: Shubham Chaudhary,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-01-06 22:34:06

Pierwszy bieg:

git reflog

Pokaże Ci wszystkie możliwe działania, które wykonałeś w repozytorium, na przykład commit, merge, pull, itp.

To zrób:

git reset --hard ActionIdFromRefLog
 175
Author: U. Ali,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-24 09:33:20

Cofnij ostatni commit:

git reset --soft HEAD^ lub git reset --soft HEAD~

To cofnie ostatni commit.

Tutaj --soft oznacza reset do inscenizacji.

HEAD~ lub HEAD^ oznacza przejście do commit przed głową.


Zastąp ostatni commit nowym commitem:

git commit --amend -m "message"

Zastąpi ostatni commit nowym commitem.

 167
Author: akshay_rahar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-12-13 22:05:20

Inny sposób:

Sprawdź gałąź, którą chcesz przywrócić, a następnie zresetuj lokalną kopię roboczą z powrotem do commita, który chcesz być najnowszym na zdalnym serwerze (wszystko po nim przejdzie do pa-pa). Aby to zrobić, w SourceTree kliknąłem prawym przyciskiem myszy i wybrałem "Resetuj nazwę gałęzi do tego commita".

Następnie przejdź do katalogu lokalnego repozytorium i uruchom polecenie:

git -c diff.mnemonicprefix=false -c core.quotepath=false push -v -f --tags REPOSITORY_NAME BRANCHNAME:BRANCHNAME

Spowoduje to usunięcie wszystkich commitów po bieżącym w lokalnym repozytorium, ale tylko dla tej jednej gałęzi.

 164
Author: CommaToast,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-24 09:34:21

Wpisz git log i znajdź ostatni kod skrótu zatwierdzania, a następnie wpisz:

git reset <the previous co>
 154
Author: Peter Mortensen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-24 09:34:18

W moim przypadku przypadkowo popełniłem kilka plików, których nie chciałem. Więc zrobiłem co następuje i zadziałało:

git reset --soft HEAD^
git rm --cached [files you do not need]
git add [files you need]
git commit -c ORIG_HEAD

Zweryfikuj wyniki używając gitk lub Git log --stat

 148
Author: egridasov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-24 09:34:09

Proste, Uruchom to w linii poleceń:

git reset --soft HEAD~ 
 143
Author: ihue,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-01-18 21:58:33

Istnieją dwa główne scenariusze

Nie wcisnąłeś jeszcze commita

Jeśli problemem były dodatkowe pliki, które przekazałeś (a nie chcesz, aby były w repozytorium), możesz je usunąć używając git rm, a następnie komentując za pomocą --amend

git rm <pathToFile>

Możesz również usunąć całe katalogi za pomocą -r, a nawet połączyć je z innymi poleceniami Bash

git rm -r <pathToDirectory>
git rm $(find -name '*.class')

Po usunięciu plików Możesz zatwierdzić, używając opcji --amend

git commit --amend -C HEAD # the -C option is to use the same commit message

To będzie przepisz swój ostatni commit lokalny usuwając dodatkowe pliki, więc te pliki nigdy nie zostaną wysłane na push, a także zostaną usunięte z lokalnego .repozytorium git by GC.

Już nacisnąłeś commit

Możesz zastosować to samo rozwiązanie w innym scenariuszu, a następnie wykonać git push z opcją -f, ale jest to nie zalecane, ponieważ nadpisuje zdalną historię z rozbieżną zmianą (może uszkodzić twoje repozytorium).

Zamiast tego, musisz zrobić commit Bez --amend (pamiętaj o -amend': ta opcja przepisuje historię ostatniego commita).

 133
Author: dseminara,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-01-11 23:50:47

Dla lokalnego commita

git reset --soft HEAD~1

Lub jeśli nie pamiętasz dokładnie, w którym commicie jest, możesz użyć

git rm --cached <file>

For a pushed commit

Właściwym sposobem usuwania plików z historii repozytorium jest użycie git filter-branch. Czyli

git filter-branch --index-filter 'git rm --cached <file>' HEAD

Ale zalecam uważne używanie tego polecenia. Czytaj więcej na strona podręcznika Git-filter-branch(1) .

 132
Author: geoom,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-07-21 20:15:08

Aby zresetować poprzednią wersję, trwale usuwając wszystkie niezatwierdzone zmiany:

git reset --hard HEAD~1
 131
Author: thestar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-09-16 07:25:01

Istnieje wiele sposobów, aby to zrobić:

Polecenie Git cofające ostatni commit / poprzedni commit:

Ostrzeżenie: nie używaj --hard, jeśli nie wiesz, co robisz. -- trudne jest zbyt niebezpieczne i może usunąć Twoje pliki.

Podstawowe polecenie do przywrócenia commita w Git to:

$ git reset --hard <COMMIT -ID>

Lub

$ git reset --hard HEAD~<n>

COMMIT-ID : ID dla commita

N: jest liczbą ostatnich commitów, które chcesz revert

Możesz uzyskać identyfikator zatwierdzenia jak pokazano poniżej:

$ **git log --oneline**

d81d3f1 function to subtract two numbers

be20eb8 function to add two numbers

bedgfgg function to mulitply two numbers

Gdzie d81d3f1 i be20eb8 są identyfikatorami zmian.

Teraz zobaczmy kilka przypadków:

Załóżmy, że chcesz przywrócić ostatni commit 'd81d3f1'. Oto dwie opcje:

$ git reset --hard d81d3f1

Lub

$ git reset --hard HEAD~1

Załóżmy, że chcesz przywrócić commit 'be20eb8':

$ git reset --hard be20eb8

Aby uzyskać bardziej szczegółowe informacje, możesz odwołać się i wypróbować kilka innych poleceń Resetowanie głowicy do określonego stanu:

$ git reset --help
 131
Author: user3799762,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-19 14:00:16