GitHub - jak przywrócić zmiany do poprzedniego stanu
Używam Githuba jako zdalnego repozytorium.
Wypchnąłem już 5 commitów na serwer i chcę powrócić do stanu sprzed tych commitów.
Jeśli hash commita wynosi 3425661dba2aadccdbab
, Jak przywrócić cały lokalny / zdalny commit do tego commita? Próbowałem
$ reset --hard 3425661dba2aadccdbab
Ale to tylko zresetowało moją roboczą głowę do tej gałęzi i wymagało ode mnie ponownego wykonania. Próbowałem kasy, ale to spowodowało, że wylądowałem w gałęzi "odłączonej głowy". 4 answers
Zasadniczo masz dwie opcje cofania zmian:
- utwórz nowy commit, który zastosuje odwrotne zmiany. Jest to preferowana opcja, ponieważ nie zmienia historii w publicznym repozytorium
- Usuń commity i wypchnij je siłą.
Pierwszą opcję można uzyskać za pomocą git revert
git-revert-przywraca istniejące commity
Biorąc pod uwagę jeden lub więcej istniejących commitów, Przywróć zmiany, które powiązane łaty wprowadź i nagraj kilka nowych commitów, które je rejestrują.
Przykładem może być git revert -n HEAD~5..HEAD
. Polecenie to tworzy 5 nowych commitów, z których każdy anuluje jeden z ostatnich 5 commitów aktualnie sprawdzonej gałęzi.
Drugą opcją byłoby usunięcie commitów. Zauważ, że to zmienia historię w repozytorium. Więc każdy, kto już wyciągnął zmiany, prawdopodobnie będzie raczej zaskoczony, a rzeczy mogą się szybko bałagan. To powiedziawszy, możesz zrobić
git reset --hard HEAD~5
git push --force
The pierwsze polecenie usunie wszelkie niezatwierdzone zmiany w bieżącej kopii roboczej. i zresetuj lokalne repozytorium do stanu bieżącego commitów HEAD-5. Drugie polecenie wymusi - push do domyślnego zdalnego (tj. GitHub) tam, wszelkie zmiany odbiegające od bieżącego lokalnego repozytorium są nadpisywane.
Uwaga z ostrzeżeniem: jeśli tak naprawdę nie wiesz, co robisz, nie używaj tej opcji, ponieważ może to prowadzić do utraty danych dla Ciebie lub innych osób, jeśli nie zrobisz tego dobrze. użyj pierwsza opcja zamiast tego, ponieważ będzie w przejrzysty sposób usuwać zmiany, ale bez nieprzyjemnych skutków ubocznych przepisywania historii.
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-12 16:49:57
Do A git push -f
. Nie jest to dobry pomysł, jeśli są inne osoby używające tego samego repo.
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-08-07 08:59:29
Możesz wykonać git revert <commit>
dla wszystkich commitów, które zostały wykonane po twoim wymaganym stanie. (W odwrotnej kolejności, aby uniknąć konfliktów.)
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-08-07 09:05:41
Wykonaj Git checkout, a następnie zatwierdź go do wybranej gałęzi. Spowoduje to utworzenie nowego commita ze starym kodem (więc będziesz miał 6 commitów).
git checkout HEAD~3
, gdzie 3 to liczba commitów, do których chcesz powrócić.
Jeszcze lepiej, możesz pobrać pojedynczy plik do obecnej głowy:
git checkout 3425661dba2aadccdbab:path/to/file/from/base
EDIT:
Jest podobny pytanie tutaj:
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-05-23 12:26:04