Magit: как разбить один и тот же файл между двумя разными коммитами в одной ветки?

Как я могу получить разницу между двумя коммитами файла того же, используя magit?

Непосредственно из git можно сделать этот. Но я не знаю, как это сделать изнутри magit. Из magit-status кажется, что d и d возвращает diff для всего репозитория. Это очень проблематично для меня, поскольку хранилище огромно и вызывает magit (и, в свою очередь, emacs), чтобы перестать отвечать на запросы. Можно ли запросить magit ограничить поиск только одним файлом из репозитория?

Я также пробовал в буфере magit-status сделать : diff $start_commit..$end_commit -- path/to/file. Это работает, но выход представляет собой простой буфер без подсветки или каких-либо вариантов сгибания...

Ответ 1

Один из способов - использовать vc как предложено этим связанным ответом - в частности C-u C-x v =. Тем не менее, это возвращает буфер без возможности (un) сбрасывать куски.

Ответ 2

В случае, если кто-то споткнутся об этом сейчас, теперь можно сделать это в magit (я делаю это из magit-log, но вы, вероятно, можете сделать это и из других источников):

  • Введите d, чтобы открыть magit-diff-popup
  • Введите =f, чтобы указать файл, который вы хотите просмотреть (введите путь относительно корневого каталога проекта)
  • Введите r, чтобы выполнить диапазон разности. Вам будет задан диапазон фиксации, например, 4abcde2..HEAD. Альтернативно, если вы выделите диапазон коммитов в magit-log, диапазон будет установлен для вас автоматически без приглашения.

Таким образом, вы попадаете в буфер magit-diff с подсветкой и складыванием кода.