2012-04-19 10 views
171

Jak przełączyć się na konkretny commit Git bez utraty wszystkich zatwierdzeń wykonanych po nim?Tymczasowo przełączyć kopię roboczą na konkretny zatwierdzenie Git.

Chcę, aby te lokalne pliki zostały zmienione, ale baza danych zatwierdzeń pozostanie nienaruszona, tylko aktualny wskaźnik pozycji zostanie ustawiony na aktualnie wybrany zatwierdzenie.

Chcę zmienić stan plików na określone zatwierdzenie, uruchomić projekt, a po zakończeniu przywrócić pliki do ostatniego zatwierdzenia.

Jak to zrobić, nie pakując całego folderu projektu?

+0

Powiązane: [Powróć do poprzedniego zatwierdzenia Git] (http://stackoverflow.com/q/4114095/456814). –

Odpowiedz

251

Jeśli jesteś w określonym oddziale mybranch, po prostu śmiało i git checkout commit_hash. Następnie możesz wrócić do swojej gałęzi przez git checkout mybranch. Miałem dziś tę samą grę, która dzieli dziś błąd na plusa. Ponadto powinieneś wiedzieć o git bisect.

+1

Zauważyłem, że - trudno robi dokładnie to, czego chcę, i żadne zobowiązania nie zostaną utracone. – Paul

+6

Uwaga możesz po prostu zrobić 'git checkout commit_hash', jeśli jesteś na czystym repozytorium i nie musisz robić rozgałęzień. Może być łatwiej w niektórych przypadkach użycia (np. Moje). – enderland

+0

@enderland: twój HEAD zawsze wskazuje na gałąź, zwykle :) –

39

Najpierw użyj git log, aby wyświetlić log, wybierz żądany commit, zanotuj skrót sha1 używany do identyfikacji zatwierdzenia. Następnie uruchom git checkout hash. Po zakończeniu, git checkout original_branch. Ma to tę zaletę, że nie przesuwa HEAD, po prostu przełącza kopię roboczą na konkretny commit.

+4

Myślę, że masz na myśli 'git checkout '. 'git checkout HEAD' jest efektywnie NOOP –

+0

Zauważyłem, że reset - ostro robi dokładnie to, czego chcę, i żadne zatwierdzenia nie zostaną utracone. – Paul

+3

'git reset --hard ' zmienia HEAD bieżącego oddziału, podczas gdy 'git checkout ' dostajesz odłączone zamówienie, które nie zmienia żadnej gałęzi, i możesz łatwo wrócić bez znajomości oryginalnego identyfikatora twojego oddziału jak pokazano w tej odpowiedzi. – jofel

Powiązane problemy