Как я могу открыть определенную ревизию файла с помощью 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суффиксы и т. Д.


Это не ответ на волшебный вопрос. Вы бы опубликовали ответ C на вопрос по Ruby?
Брайан Эш,

4
@BryanAsh Да, если решение в C намного проще.
Маркус Штраус
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.