Przywrócić commit przez SHA hash w Git? [duplikat]
To pytanie ma już odpowiedź tutaj:
- Jak przywrócić repozytorium Git do poprzedniego commita 39 odpowiedzi
Say its SHA hash is 56e05fced214c44a37759efa2dfc25a65d8ae98d
. Więc dlaczego nie mogę po prostu zrobić czegoś takiego:
git revert 56e05fced214c44a37759efa2dfc25a65d8ae98d
9 answers
Jeśli Chcesz zatwierdzić Na szczycie bieżącej głowy z dokładnym stanem w innym zatwierdzeniu, cofając wszystkie pośrednie zatwierdzenia, możesz użyć reset
, aby utworzyć poprawny stan indeksu, aby zatwierdzić.
# Reset the index and working tree to the desired tree
# Ensure you have no uncommitted changes that you want to keep
git reset --hard 56e05fced
# Move the branch pointer back to the previous HEAD
git reset --soft HEAD@{1}
git commit -m "Revert to 56e05fced"
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-17 16:51:18
To, co git-revert robi, to tworzy commit, który cofa zmiany wprowadzone w danym commicie, tworząc commit, który jest odwrotny (dobrze, wzajemny) danego commita. Dlatego
git revert <SHA-1>
Powinno i działa.
Jeśli chcesz cofnąć się do podanego commita i możesz to zrobić, ponieważ ta część historii nie została jeszcze opublikowana, musisz użyć git-reset , a nie git-revert:
git reset --hard <SHA-1>
(zauważ, że --hard
spowodowałoby utratę jakichkolwiek niezaangażowanych zmian w working directory).
Uwagi Dodatkowe
Przy okazji, być może nie jest to oczywiste, ale wszędzie tam, gdzie dokumentacja mówi <commit>
lub <commit-ish>
(lub <object>
), możesz umieścić SHA-1 identyfikator (pełny lub skrócony) commita.
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-20 09:31:38
Odwraca wspomniany commit, to znaczy dodaje commit przeciwny do niego. Jeśli chcesz zamówić wcześniejszą wersję, wykonaj:
git checkout 56e05fced214c44a37759efa2dfc25a65d8ae98d
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-20 09:25:10
Najlepszym sposobem na cofnięcie do określonego commita jest:
git reset --hard <commit-id>
Wtedy:
git push <reponame> -f
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-20 09:26:07
Jeśli zmiany zostały już przesunięte do publicznego, współdzielonego zdalnego i chcesz przywrócić wszystkie zmiany pomiędzy HEAD
i <sha-id>
, możesz przekazać zakres zmian do git revert
,
git revert 56e05f..HEAD
I odwróci wszystkie commity pomiędzy 56e05f
i HEAD
(z wyłączeniem punktu początkowego zakresu, 56e05f
).
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-06-28 19:44:30
Aktualizacja:
Ta odpowiedź jest prostsza od mojej: Jak przywrócić repozytorium Git do poprzedniego commita?
Oryginalna odpowiedź
# Create a backup of master branch
git branch backup_master
# Point master to '56e05fce' and
# make working directory the same with '56e05fce'
git reset --hard 56e05fce
# Point master back to 'backup_master' and
# leave working directory the same with '56e05fce'.
git reset --soft backup_master
# Now working directory is the same '56e05fce' and
# master points to the original revision. Then we create a commit.
git commit -a -m "Revert to 56e05fce"
# Delete unused branch
git branch -d backup_master
Dwa polecenia git reset --hard
i git reset --soft
są tutaj magiczne. Pierwszy zmienia katalog roboczy, ale również zmienia głowę. Naprawimy głowę przez drugą.
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:34:53
To jest bardziej zrozumiałe:
git checkout 56e05fced -- .
git add .
git commit -m 'Revert to 56e05fced'
I udowodnić, że zadziałało:
git diff 56e05fced
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-06-23 16:29:10
Powinno być tak proste jak:
git reset --hard 56e05f
To zaprowadzi cię do tego konkretnego punktu w czasie.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
2013-01-04 00:15:47
To może zadziałać:
git checkout 56e05f
echo ref: refs/heads/master > .git/HEAD
git commit
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-06-25 22:36:10