Как я могу сравнить один файл с magit?

Скажем, я внес ряд несвязанных изменений в несвязанные файлы в своем репозитории git. Я хочу просмотреть и зафиксировать каждый из файлов отдельно.

Я запускаю magit-status и получаю список измененных файлов. Но единственные команды magit diff, которые я могу найти (d и D), различают целые версии, а не отдельные файлы.

Мне нужен вывод git diff <filename>, но в буфере magit diff. Как я могу заставить magit сравнивать только один файл?


person Dan    schedule 22.07.2013    source источник
comment
Как насчет использования e на magit-status для dwimming Ediff?   -  person nephewtom    schedule 29.03.2017


Ответы (3)


Рекомендую посмотреть видео от создателя magit. Это 20 минут, и он показывает вам рабочий процесс в том виде, в котором он был задуман.

Кроме того, небольшой совет: вы можете использовать 1 2 3, чтобы изменить детализацию текущего заголовка.

Еще один небольшой совет: если вас не устраивает размер фрагментов, вы можете создать произвольные регионы, верно, отметив регион и нажав s. Это магия. Какое-то время я не знал об этой опции, на самом деле я возвращался к консоли и делал git add -p по старинке.

person abo-abo    schedule 23.07.2013
comment
Печально, что последний магит-скринкаст был 4 года назад. Как сообществу, Emacs нужно больше использовать скринкасты. - person event_jr; 24.07.2013

Определенно есть преимущества в том, чтобы не идти против течения при использовании инструментов, о чем свидетельствуют другие ответы.

С другой стороны, иногда вы просто хотите сказать своему редактору, что делать, и попросить людей в Интернете ответить на ваши вопросы вместо того, чтобы говорить, что вы хотите сделать что-то еще.

magit предоставляет интерфейс меню для действий с текущим файлом через M-x magit-file-popup. Клавиши, которые вам нужно нажимать отсюда, du. Это может быть слишком много нажатий клавиш для вас, в этом случае вы можете напрямую вызвать magit-diff следующим образом:

(defun magit-diff-given-file (&optional file)
  (interactive)
  (unless file
    (setf file buffer-file-name))
  (magit-diff-working-tree "HEAD" nil (list (file-relative-name file (magit-toplevel file)))))

Возможно, вы захотите определить свою собственную функцию и привязку клавиш для этого.

magit-diff имеет преимущества перед vc-diff, потому что позволяет вам перейти к местоположению diff.

person Att Righ    schedule 29.11.2016
comment
vc-diff также позволяет перейти к расположению diff. (Возможно, это новая функция.) - person Torsten Bronger; 18.03.2020
comment
Хотел бы я проголосовать за это десятки раз, потому что иногда вы просто хотите сказать своему редактору, что делать, и чтобы люди в Интернете отвечали на ваши вопросы вместо того, чтобы говорить, что вы хотите сделать что-то еще. - person Paul Gowder; 26.12.2020

person    schedule
comment
Я не знал о TAB. - person Dan; 23.07.2013
comment
Право, я думал, что это может быть так. Это в значительной степени убийственный аспект магита, который вы упустили! :) Вы можете создавать или удалять целые файлы, отдельные фрагменты в файле или даже отмеченную область. Вам следует просмотреть magit.github.io/magit/magit.html, вероятно, также отсутствуют некоторые другие приятные функции. - person phils; 23.07.2013
comment
Я только что использовал шпаргалку. Я не знал, что означают команды видимости раздела, и просто подумал, что s не работает в моей версии magit. - person Dan; 23.07.2013
comment
Похоже, ваша шпаргалка может прояснить ситуацию для людей, которые еще не знают, как она работает. Вы должны написать автору и предложить улучшения. - person phils; 23.07.2013
comment
Вас также может заинтересовать magit-ediff, который по умолчанию привязан к e и открывает сеанс ediff для diff/файла в точке. - person assem; 23.07.2013
comment
Спасибо за ответ. мне очень помогает использование vc-diff - person eleforest; 24.08.2014
comment
Элефорест: Не за что. Вы также можете счесть полезным привязать последовательность клавиш к vc-ediff, так как у нее нет привязки по умолчанию (я использую C-x v C-=). - person phils; 24.08.2014
comment
Есть идеи, как запретить magit-ediff переупорядочивать мои окна? Он закрыл все окна и заменил их своими собственными в другом макете, вместо того, чтобы просто захватить окна. - person Peter Becich; 23.03.2015
comment
Peter Becich: Вы, несомненно, могли бы иметь код для запоминания и восстановления конфигурации окна по обе стороны от вызова ediff, но лично я просто полагаюсь на winner-mode для такого рода вещей. Быстрые C-c <left> или два всегда возвращают все на круги своя, и это работает для всего. - person phils; 23.03.2015