Przywrócić commit przez SHA hash w Git? [duplikat]

To pytanie ma już odpowiedź tutaj:

Nie wiem, jak to działa. Na przykład, Chcę przywrócić commit sześć commitów za głową, przywracając wszystkie zmiany w commitach pośrednich pomiędzy nimi.

Say its SHA hash is 56e05fced214c44a37759efa2dfc25a65d8ae98d. Więc dlaczego nie mogę po prostu zrobić czegoś takiego:

git revert 56e05fced214c44a37759efa2dfc25a65d8ae98d
 515
git
Author: JP Silvashy, 2009-12-13

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"
 993
Author: CB Bailey,
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.

 115
Author: Jakub Narębski,
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
 83
Author: Michael Krelin - hacker,
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
 59
Author: darshit khatri,
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).

 54
Author: Flueras Bogdan,
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ą.

 18
Author: Jacob Dam,
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
 3
Author: Tuyen Tran,
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.
 0
Author: longda,
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
 -2
Author: Jake,
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