Mam stare zatwierdzenie, które zrobiłem kilka tygodni temu. Chcę przywrócić tylko jeden plik z tego zatwierdzenia. Co ja robię?
Mam stare zatwierdzenie, które zrobiłem kilka tygodni temu. Chcę przywrócić tylko jeden plik z tego zatwierdzenia. Co ja robię?
Odpowiedzi:
git checkout 'master@{7 days ago}' -- path/to/file.txt
Nie zmieni to HEAD, po prostu nadpisze lokalny plik path/to/file.txt
Zobacz man git-rev-parse, aby zapoznać się z możliwymi specyfikacjami wersji (oczywiście prosty skrót (jak dd9bacb
) dobrze się sprawdzi)
Nie zapomnij zatwierdzić zmiany (po sprawdzeniu ...)
revision-specification
co OP poprosił :)
shacommit~1
(np .:), git checkout 0f4bbdcd~1 -- path/to/file.txt
aby uzyskać zatwierdzenie bezpośrednio przed.
git checkout [Revision_Key] -- path/to/file
.git checkout
radzi sobie z pojedynczymi plikami (patrz odpowiedź sehe), nie trzeba kopiować i wklejać.
HEAD
, ORIG_HEAD
czy którykolwiek z tych, w połączeniu z ^
/ ~
/ @
-Style notacji.
Musiałem przywrócić najnowszy plik zapisany w git. Aby więc powtórzyć i podać inną perspektywę, musisz to zrobić, wykonując następujące dwa kroki:
git log -3
Pokazuje trzy ostatnie zatwierdzenia. Przeczytaj komentarze i nazwisko autora, aby zawęzić zakres konkretnej wersji. Zapisz długi identyfikator zatwierdzenia (tj. B6b94f2c19c456336d60b9409fb1e373036d3d71) dla żądanej wersji zatwierdzenia.
git checkout b6b94f2c19c456336d60b9409fb1e373036d3d71 - mój_plik.java
Przekaż identyfikator zatwierdzenia ORAZ nazwę pliku, który chcesz przywrócić. Upewnij się, że masz spację przed i po podwójnym łączniku.
Można to zrobić na wiele innych sposobów. Ale ten jest najprostszy, jaki pamiętam. Mam nadzieję, że to pomaga.
UWAGA: Jeśli znajdujesz się w ścieżce / folderze projektu, nie jest konieczne wpisywanie pełnej ścieżki pliku w poleceniu pobierania.
Wszystkie odpowiedzi wspominają git checkout <tree-ish> -- <pathspec>
. Od wersji git 2.23.0 wprowadzono nową metodę przywracania git , która powinna git checkout
obejmować część tego, za co była odpowiedzialna. Zobacz najważniejsze zmiany na blogu github .
Domyślne zachowanie tego polecenia polega na przywróceniu stanu drzewa roboczego z zawartością pochodzącą z source
parametru (który w twoim przypadku będzie skrótem zatwierdzenia).
Zakładając, że skrótem zatwierdzenia jest abcdef
polecenie, wyglądałoby to tak:
git restore --source=abcdef file_name
co (domyślnie) umieszcza je w działającym drzewie. Jeśli chcesz umieścić zmianę bezpośrednio w indeksie, aby można było ją od razu zatwierdzić:
git restore --source=abcdef --worktree --staged file_name
lub z krótkimi nazwami opcji:
git restore -s=abcdef -W -S file_name