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-specificationco OP poprosił :)
shacommit~1(np .:), git checkout 0f4bbdcd~1 -- path/to/file.txtaby uzyskać zatwierdzenie bezpośrednio przed.
git checkout [Revision_Key] -- path/to/file.git checkoutradzi sobie z pojedynczymi plikami (patrz odpowiedź sehe), nie trzeba kopiować i wklejać.
HEAD, ORIG_HEADczy 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 checkoutobejmować 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 sourceparametru (który w twoim przypadku będzie skrótem zatwierdzenia).
Zakładając, że skrótem zatwierdzenia jest abcdefpolecenie, 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