Wyrzuć lokalne commity w git

Z powodu złego wybierania, moje lokalne repozytorium git jest obecnie o 5 commitów przed oryginałem i nie jest w dobrym stanie. Chcę się pozbyć tych wszystkich commitów i zacząć od nowa.

Oczywiście usunięcie mojego katalogu roboczego i ponowne klonowanie zrobiłoby to, ale ponowne pobranie wszystkiego z Githuba wydaje się przesadą i nie jest dobrym wykorzystaniem mojego czasu.

Może git revert jest to, czego potrzebuję, ale nie chcę skończyć 10 zobowiązuje się przed początkiem (lub nawet 6), nawet jeśli sam kod wróci do właściwego stanu. Chcę tylko udawać, że ostatnie pół godziny nigdy się nie wydarzyło.

Czy istnieje proste polecenie, które to zrobi? Wydaje się to oczywistym przypadkiem użycia, ale nie znajduję żadnych przykładów.


Zauważ, że to pytanie dotyczy konkretnie , nie o:

  • untracked files
  • unstaged changes
  • zainscenizowane, ale niezakontraktowane zmiany
 983
git
Author: David Moles, 2011-02-24

10 answers

Jeśli Twoje nadmiarowe commity są widoczne tylko dla ciebie, możesz po prostu zrobić git reset --hard origin/<branch_name>, aby wrócić do miejsca pochodzenia.

Wykonanie git revertsprawia, że Nowe commity usuwają Stare w sposób, który utrzymuje historię wszystkich przy zdrowych zmysłach.

 1711
Author: Ben Jackson,
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-08-18 17:47:59

Po prostu usuń lokalną gałąź master i odtworz ją w ten sposób:

git branch -D master
git checkout origin/master -b master
 201
Author: Ramon Zarazua B.,
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
2011-02-23 21:38:38

Try:

git reset --hard <the sha1 hash>

Aby zresetować głowę tam, gdzie chcesz być. Użyj gitk, aby zobaczyć, w którym commicie chcesz być. Możesz również zrobić reset w gitk.

 147
Author: Anders Zommarin,
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-04-28 15:19:21

Jeśli używasz aplikacji Atlassian SourceTree , możesz użyć opcji reset w menu kontekstowym.

Tutaj wpisz opis obrazka

 41
Author: muruge,
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-01-29 20:54:14

Na Twojej gałęzi:

git reset --hard origin/<branch_name>

Zatwierdź odwrócenie (do stanu, bez lokalnych commitów), używając "git log" lub "git status".

 27
Author: parasrish,
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-03-31 15:17:24

Usuń najnowszy commit:

git reset --hard HEAD~1

Usuń najnowszy commit, bez niszczenia wykonanej pracy:

git reset --soft HEAD~1

 25
Author: James L.,
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-02-11 14:06:16

Aby zobaczyć / uzyskać identyfikator sha1 commita, który również chcesz wrócić

gitk --all

Aby powrócić do tego commita

git reset --hard sha1_id

!Uwaga. Wszystkie commity, które zostały dokonane po tym commicie, zostaną usunięte (i wszystkie Twoje modyfikacje w projekcie). Więc najpierw lepiej Sklonuj projekt do innej gałęzi lub skopiuj do innego katalogu.

 11
Author: Nicholas,
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-05-27 10:07:48

git reset --hard @{u}* usuwa wszystkie lokalne zmiany w bieżącej gałęzi, w tym commity. Dziwię się, że nikt jeszcze tego nie opublikował, biorąc pod uwagę, że nie będziesz musiał sprawdzać, do czego chcesz wrócić lub bawić się gałęziami.

* oznacza to reset do bieżącej gałęzi na @{upstream} - zwykle origin/<branchname>, ale nie zawsze

 8
Author: Kevin Chen,
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-06-26 16:49:23

Dla lokalnych commitów, które nie są wypychane, możesz również użyć git rebase -i, aby usunąć lub usunąć commit.

 7
Author: Nikhil Katre,
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-17 21:43:36

Miałem sytuację, w której chciałem usunąć commit, który nie został wypchnięty, ale commit był przed kolejnym. W tym celu użyłem następującego polecenia

git rebase -i HEAD~2 -> będzie to rebase last 2 commit

I użyłem 'drop' dla podpisu commit, który chciałem usunąć.

 5
Author: Robert,
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-09-26 09:57:24