Jak mogę otworzyć konkretną wersję pliku za pomocą Magit?

43

Czy można otworzyć konkretną wersję pliku w Emacsie za pomocą Magit bez zmiany bieżącej gałęzi?

Wprowadziłem zmiany lokalne do wersji, w której zmodyfikowane funkcje zostały zastąpione funkcjami w innym pliku. Chciałbym otworzyć starą wersję moich zmian w osobnym buforze, aby móc porównać zmiany obok siebie.

Moje obecne hacky rozwiązanie to uruchomić, git show <branch pre-rebase>:file > old_filea następnie otworzyć old_filew Emacs.

David Holm
źródło
1
github.com/pidu/git-timemachine może tymczasowo wyświetlić plik między poszczególnymi wersjami.
kuanyui
1
@kuanyui używam, git-timemachineale ponieważ mój kod został ponownie wyrenderowany, nie sądzę, aby działał, ponieważ stary kod nie jest częścią historii bieżącego oddziału?
David Holm

Odpowiedzi:

56

Możesz wyświetlić plik dla określonej wersji za pomocą M-x magit-find-file RET <filename> RET.

Lub możesz najpierw wyświetlić różnicę do zatwierdzenia, naciskając RETją, przechodząc do pliku wewnątrz różnicy, a następnie naciskając RETponownie.

Kyle Meyer
źródło
8
To działa dla mnie; oto co robię: z bieżącej wersji pliku M-x magit-log-buffer-fileprzenieś linię do żądanego zatwierdzenia M-x magit-find-file. Wtedy wartością domyślną będzie zatwierdzenie. Muszę podać ścieżkę do pliku, ponieważ nie jest on pobierany z bufora dziennika.
Liam,
@tarsius, Trochę jak magit-find-file, ale gdzie muszę tylko wybrać wersję dla pliku bieżącego bufora. Czy już istnieje?
ergosys,
Tak, użyj magit-find-filesię z bufora do przeglądania plików, a następnie po prostu wpisz RETw drugim monicie (odpowiedni plik jest oferowany jako domyślny).
Tarsius
Dziękujemy za informacje i całą pracę nad Magit. Nie było zbyt trudno zhakować funkcję, która pomija ten irytujący dodatkowy klawisz, więc cieszę się, aż pojawi się kolejny świąd.
ergosys
29

Można to zrobić za pomocą zwykłego VC (wbudowanego w Emacsa), bez Magita. Wpisz C-x v ~i wpisz żądaną wersję. Rozumie tagi i skróty SHA1, a także zwykłe ~1sufiksy itp.

legoscia
źródło
To nie jest odpowiedź na magiczne pytanie. Czy opublikowałbyś odpowiedź C na pytanie Ruby?
Bryan Ash
4
@BryanAsh tak, jeśli rozwiązanie w C jest o wiele łatwiejsze.
Markus Strauss