Jak anulować lokalny commit git

Mój problem polega na tym, że zmieniłem plik NP: README, dodałem nową linię ' to dla mojej linii testowej ' i zapisałem Plik, następnie wydałem następujące polecenia

 git status

 # On branch master
 # Changed but not updated:
 #   (use "git add <file>..." to update what will be committed)
 #   (use "git checkout -- <file>..." to discard changes in working directory)
 #
 #  modified:   README
 #
 no changes added to commit (use "git add" and/or "git commit -a")


 git add README

 git commit -a -m 'To add new line to readme'

Nie wcisnąłem kodu na github, teraz chcę anulować ten commit.

Do tego użyłem

   git reset --hard HEAD~1

Ale zgubiłem nowo dodaną linię ' to dla mojej linii testowej ' z pliku README. Tak się nie powinno stać. Potrzebuję treści. czy istnieje sposób na zachowanie treści i anulowanie moje lokalne zobowiązanie?

Author: Amal Kumar S, 2011-01-31

6 answers

Po prostu użyj git reset bez flagi --hard:

git reset HEAD~1

PS: w systemach opartych na Uniksie można użyć HEAD^, co jest równe HEAD~1. W systemie Windows HEAD^ nie będzie działać, ponieważ ^ sygnalizuje kontynuację linii. Więc twój wiersz polecenia zapyta Cię More?.

 1001
Author: Koraktor,
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-07-10 18:42:23

Użyj --soft zamiast --hard flagi:

git reset --soft HEAD^
 129
Author: TpED,
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
2012-08-10 09:24:58

Jeśli jesteś w trakcie zatwierdzania (tzn. już w edytorze), możesz go anulować, usuwając wszystkie wiersze powyżej pierwszego #. To anuluje commit.

Więc możesz usunąć wszystkie linie tak, że komunikat commit jest pusty, a następnie zapisać plik:

To powinno wyglądać tak.

Otrzymasz wiadomość z napisem Aborting commit due to empty commit message..

 22
Author: inostia,
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-06-20 19:59:37

Możesz powiedzieć Gitowi, co ma zrobić z Twoim indeksem (zestawem plików, które staną się następnym zatwierdzeniem) i katalogiem roboczym podczas wykonywania Git reset używając jednego z parametrów:

--soft: tylko commity zostaną zresetowane, podczas gdy indeks i katalog roboczy nie zostaną zmienione.

--mixed: spowoduje to zresetowanie indeksu, aby dopasować go do głowy, podczas gdy katalog roboczy nie zostanie dotknięty. Wszystkie zmiany pozostaną w katalogu roboczym i będą wyświetlane jako zmodyfikowane.

--hard: resetuje się wszystko (commity, index, working directory), aby pasowało do głowy.

W Twoim przypadku, użyłbym git reset --soft Aby zachować twoje zmodyfikowane zmiany w indeksie i katalogu roboczym. Pamiętaj, aby sprawdzić to , aby uzyskać bardziej szczegółowe wyjaśnienie.

 3
Author: Nesha Zoric,
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-05-29 10:22:42

Użyj poniższego polecenia: $ GIT reset HEAD~1 Po tym możesz również przeglądać pliki, które powracają jak poniżej odpowiedź.

Unstaged zmiany po resecie: M application / config / config.php M application / config / database.php

 1
Author: Omkar,
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-05-14 13:25:38

Pierwszą rzeczą, którą powinieneś zrobić, to uzasadnić, czy chcesz zachować lokalne zmiany przed usunięciem Komunikatu o zatwierdzeniu.

Użyj git log, aby wyświetlić bieżące komunikaty zatwierdzania, a następnie znajdź identyfikator zatwierdzania przed usunięciem, nie tylko ten, który chcesz usunąć.

Jeśli chcesz zachować lokalnie zmienione pliki, po prostu usuń komunikat commit:

git reset --soft commit_id

Jeśli chcesz usunąć wszystkie lokalnie zmienione pliki i komunikat commit:

git reset --hard commit_id

To różnica miękkiego i twardego

 0
Author: mistdon,
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-09-12 03:04:24