Chciałbym przywrócić cały katalog (rekurencyjnie) z historii mojego repozytorium git.
Jest tylko 1 gałąź (master).
Znam zatwierdzenie, w którym były błędy.
Czy mogę użyć skrótu sha1 zatwierdzenia nadrzędnego, aby przywrócić stan katalogu, jaki był przed dołączeniem błędów?
Pomyślałem o czymś takim:
git checkout 348ce0aa02d3738e55ac9085080028b548e3d8d3 path/to/the/folder/
ale to nie zadziałało.
git checkout 348ce0aa02d3738e55ac9085080028b548e3d8d3 -- path/to/the/folder/
Odpowiedzi:
spróbuj dodać „-” między wersjami i ścieżkami:
A jeśli chcesz odzyskać katalog z poprzedniego zatwierdzenia, możesz zamienić skrót zatwierdzenia na HEAD ~ 1, na przykład:
źródło
rm -Rf path/to/the/folder
wtedygit checkout 348ce0aa02d3738e55ac9085080028b548e3d8d3 -- path/to/the/folder/
- Wynik: ta ścieżka miała dokładnie takie same pliki jak w tym zatwierdzeniu, bez różnic i żadnych dodatkowych plików, które zostały utworzone po tym zatwierdzeniu. Tego właśnie chcę.--
robi?Można to zrobić na dwa proste sposoby:
Jeśli zatwierdzenie, które zawierało błędy, zawierało tylko błędy, użyj,
git revert
aby odwrócić ich skutki.Jeśli nie, łatwa ścieżka jest następująca:
git checkout 348…
cp -a path/to/the/folder ../tmp-restore-folder
git checkout HEAD # or whatever
rm -rf path/to/the/folder
mv ../tmp-restore-folder path/to/the/folder
git add path/to/the/folder
git commit -m "revert …"
źródło
Jeśli po prostu
git checkout <SHA-ID>
to zrobisz, tymczasowo przeniesie Cię to do tego sha-commit.Każdy obiekt commit przechowuje w tym czasie całą strukturę dysku, więc jeśli masz tam pliki i chcesz je skopiować, możesz to zrobić. Ostrzeżenie jednak, nie będziesz w żadnej gałęzi, więc będziesz musiał wrócić do mastera przed skopiowaniem pliku do drzewa roboczego i zatwierdzeniem go.
źródło