Jak mogę pobrać plik z innego zatwierdzenia w Magit

16

Mam plik foo.txtw oddziale Ai chcę wyewidencjonować foo.txtz oddziału Bdo indeksu. W linii poleceń zrobiłbym to:

$ git checkout B -- foo.txt

Chcę móc to zrobić w magit, przechodząc do dziennika, znajdując zatwierdzenie, które mnie interesuje (np. l o B), Znajdując foo.txti uruchamiając jakieś polecenie, ale nie mogę wymyślić, jak to zrobić.

Emotuje
źródło
To jest teraz żądanie funkcji github.com/magit/magit/issues/2184 . Dzięki za obejrzenie tego, opiekunowie
Emoses

Odpowiedzi:

21

Od wersji 2.11.0 Magit jest to możliwe bezpośrednio z poziomu dyspozytora resetowania ( X fmożesz podać wersję i plik):

wprowadź opis zdjęcia tutaj

Można to zrobić programowo w programie magit, magit-file-checkoutktóry akceptuje specyfikację wersji i nazwę pliku (dzięki żądaniu funkcji @Emoses i implementacji @ Kyle Meyer). Poprzednio nazwa funkcji magit-checkout-file(od v2.3.0 - v2.9.0).

ebpa
źródło
4
magit-checkout-filejest teraz przestarzały. Użyj magit-file-checkoutzamiast tego.
Sagar Jha,
3

Nie znam wbudowanego sposobu, aby to zrobić.

Zakładając, że jesteś w gałęzi A, innym podejściem byłoby różnicowanie gałęzi B ( d r ..B), a następnie przeniesienie punktu do interesującego cię pliku. Naciśnięcie aspowoduje zastosowanie tych zmian do drzewa roboczego (zamiast indeksu).

Mam w mojej konfiguracji polecenie zresetowania lub pobrania pliku z wersji, ale w obecnym stanie nie pasuje dokładnie do tego, o co prosisz, ponieważ nie oferuje dobrej domyślnej wersji, gdy jest w wersji Magit tryb.

(defun km/magit-reset-file (rev file &optional checkout)
  "Reset FILE from revision REV.

If prefix argument CHECKOUT is non-nil, checkout FILE from REV
instead.

\(git reset REV -- FILE)
\(git checkout REV -- FILE)"
  (interactive
   (let ((rev (magit-read-branch-or-commit "Revision")))
     (list rev (magit-read-file-from-rev rev "File") current-prefix-arg)))
  (magit-with-toplevel
    (magit-run-git (if checkout "checkout" "reset")
                   rev "--" file)))
Kyle Meyer
źródło