Как я могу открыть определенную ревизию файла с помощью Magit?

43

Можно ли открыть конкретную версию файла в Emacs с помощью Magit, не меняя текущую ветку?

Я переместил некоторые локальные изменения в ревизию, где измененные функции были заменены функциональностью в другом файле. Я хотел бы открыть старую ревизию моих изменений в отдельном буфере, чтобы я мог сравнить изменения рядом.

Моим хакерским решением было запустить git show <branch pre-rebase>:file > old_fileи открыть old_fileв Emacs.

Дэвид Холм
источник
1
github.com/pidu/git-timemachine может временно просматривать файл между версиями.
Куануи
1
@kuanyui я использую, git-timemachineно так как мой код был перебазирован, я не думаю, что он будет работать, так как старый код не является частью истории текущей ветви?
Дэвид Холм

Ответы:

56

Вы можете просмотреть файл для определенной ревизии, используя M-x magit-find-file RET <filename> RET.

Или вы можете сначала просмотреть diff для фиксации, нажав RETна него, перейдя к файлу внутри diff, а затем RETснова нажав .

Кайл Мейер
источник
8
Это работает для меня; вот что я делаю: из текущей версии файла M-x magit-log-buffer-fileпереместите строку в нужный коммит, затем M-x magit-find-file. Тогда значением по умолчанию будет этот коммит. Мне нужно указать путь к файлу, так как он не берется из буфера журнала.
Лиам
@tarsius, что-то вроде magit-find-file, но где мне нужно только выбрать ревизию для файла текущего буфера. Это уже существует?
ergosys
Да, используйте magit-find-fileсебя из буфера для посещения файлов, а затем просто введите RETво втором приглашении (соответствующий файл предлагается по умолчанию).
tarsius
Спасибо за информацию и всю вашу работу над Magit. Не было слишком сложно взломать функцию, которая пропускает это надоедливое дополнительное нажатие клавиши, поэтому я счастлив, пока не случится следующий зуд.
ergosys
29

Это можно сделать с простым VC (встроенным в Emacs), без Magit. Введите C-x v ~и введите версию, которую вы хотите. Он понимает теги и хэши SHA1, а также обычные ~1суффиксы и т. Д.

legoscia
источник
Это не ответ на волшебный вопрос. Вы бы опубликовали ответ C на вопрос по Ruby?
Брайан Эш,
4
@BryanAsh Да, если решение в C намного проще.
Маркус Штраус