Undo git pull, jak przywrócić repos do starego stanu

Czy Jest jakiś sposób, aby przywrócić lub cofnąć git pull tak, że moje źródło / repos powróci do starego stanu, który był przed wykonaniem git pull ? Chcę to zrobić, ponieważ połączył niektóre pliki, których nie chciałem robić, ale tylko scalić inne pozostałe pliki. Chcę odzyskać te akta, czy to możliwe ? Dzięki:)

EDIT chcę cofnąć Git merge dla wyjaśnienia. Po obejrzeniu kilku odpowiedzi, zrobiłem to

git reflog
bb3139b... HEAD@{0}: pull : Fast forward
01b34fa... HEAD@{1}: clone: from ...name...
Co mam teraz zrobić ? Robienie git reset --hard jest w porządku ? Nie chcę się pieprzyć. to znowu, więc prosząc o szczegółowe kroki ?
Author: Martin G, 2009-08-03

8 answers

git pull zrobi dwie rzeczy: robi git fetch, a następnie git merge, gdzie łączy gałęzie, które zostały skonfigurowane do scalenia w Twoim config.

Więc to, co chcesz zrobić, to cofnąć połączenie (cofanie pobierania nie ma większego sensu i nie powinno być konieczne).

Aby to zrobić, możesz spróbować użyć git reset --hard, aby zresetować poprzedni stan. Użyj git-reflog , aby znaleźć SHA-1 poprzedniego stanu, a następnie zresetować go.

Ostrzeżenie: git reset --hard usuwa wszystkie niezakontraktowane zmiany.

 1054
Author: jkp,
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-03-21 06:46:09

To samo co odpowiedź jkp, ale tu jest pełna Komenda:

git reset --hard a0d3fe6

Gdzie a0d3fe6 znajduje się wykonując

git reflog

I patrząc na punkt, w którym chcesz cofnąć.

 235
Author: Jeffrey Sun,
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-22 00:39:44

Bardziej nowoczesnym sposobem na cofnięcie połączenia jest:

git merge --abort

I nieco starszy sposób:

git reset --merge

Old-school sposób opisany w poprzednich odpowiedziach (Ostrzeżenie: odrzuci wszystkie lokalne zmiany):

git reset --hard

Ale właściwie, warto zauważyć, że git merge --abort jest tylko równoważne git reset --merge biorąc pod uwagę, że MERGE_HEAD jest obecny. Można to odczytać w Komendzie Git help for merge.

git merge --abort is equivalent to git reset --merge when MERGE_HEAD is present.

Po nieudanym połączeniu, gdy nie ma MERGE_HEAD, nieudane połączenie można cofnąć za pomocą git reset --merge, ale niekoniecznie z git merge --abort, są więc nie tylko starą i nową składnią dla tego samego . Dlatego uważam, że git reset --merge jest o wiele bardziej przydatny w codziennej pracy.

 78
Author: Martin G,
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-05-20 09:17:49

To działa pierwsze użycie: git reflog

Znajdź swój SHA z Państwa previus I make (HEAD@{1} jest przykładem)

git reset --hard HEAD@{1}
 37
Author: Ezequiel García,
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-08 17:00:48

Jeśli masz gitk (spróbuj uruchomić "gitk --all from your Git command line"), to jest to proste. Po prostu uruchom go, wybierz commit, który chcesz wycofać (kliknij prawym przyciskiem myszy) i wybierz "Resetuj gałąź główną tutaj". Jeśli nie masz niezakontraktowanych zmian, wybierz opcję "twardy".

 36
Author: Samuel Carrijo,
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
2009-08-03 16:49:24

Załóżmy, że $COMMIT był ostatnim identyfikatorem zatwierdzenia przed wykonaniem git pull. To, czego potrzebujesz, aby cofnąć ostatnie pociągnięcie, to

git reset --hard $COMMIT

.

Bonus:

Mówiąc o ciągnięciu, chciałbym podzielić się ciekawą sztuczką.]}

git pull --rebase

Powyższa komenda jest najbardziej użyteczną komendą w moim życiu Gita, która zaoszczędziła dużo czasu.

Przed naciśnięciem nowego commita na serwer, wypróbuj to polecenie, które automatycznie zsynchronizuje najnowsze zmiany na serwerze (z fetch + merge) i umieści Twój commit na górze w git log. Nie musisz się martwić ręcznym ciągnięciem / scalaniem.

Znajdź szczegóły na: http://gitolite.com/git-pull--rebase

 19
Author: Sazzad Hissain Khan,
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-12-23 15:55:03

You can do git reset --hard ORIG_HEAD

Ponieważ "pull" lub "merge" ustawia ORIG_HEAD jako bieżący stan przed wykonaniem tych działań.

 9
Author: Orlando,
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-08-19 17:02:41

Jeśli doszło do nieudanego scalenia, co jest najczęstszym powodem chęci cofnięcia git pull, uruchomienie git reset --merge robi dokładnie to, czego można się spodziewać: zatrzymuje pobrane pliki, ale cofa scalenie, które git pull próbowało scalić. Wtedy można zdecydować, co zrobić bez bałaganu, który git merge czasami generuje. I nie trzeba go znaleźć, aby znaleźć dokładny identyfikator commita, który --hard jest wymieniony w każdej innej odpowiedzi.

 0
Author: Davide,
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-24 17:35:12