Magit откатить один файл

Вопрос касается основного режима Magit для функции Emacs, а не того, как это сделать через интерфейс командной строки.

У меня есть только локальный репозиторий Git. Как мне восстановить выбранный файл до его предыдущей версии? Я считаю, что команда Git для этого должна быть чем-то вроде git checkout HEAD^ path/to/file, но я могу ошибаться и здесь, просто догадываясь.

То, что я ищу, по сути то же самое, что и C-x v u в vc-dir буфере.

По сути, я надеялся сделать следующее:

  • удалить измененный файл.

  • вытащить из местного репо.

Но Magit, похоже, не может этого сделать, он, похоже, предпочитает просто удалить файл, а не восстанавливать его.


person Community    schedule 16.06.2013    source источник
comment
(1) Буфер истории Magit определенно поддерживает это (хотя я не помню как), нужны ли вам другие средства (например, в *magit-status*)? (2) Если вы хотите только вернуться к основному режиму, почему бы не использовать vc второстепенный режим C-x v u?   -  person lukstafi    schedule 16.06.2013
comment
Вы говорите об отмене незафиксированных изменений (то есть о возврате к текущей зафиксированной версии) или возврате к предыдущей фиксации? git checkout HEAD file отменяет незафиксированные изменения. git checkout HEAD^ file также отменит изменения (если таковые были), внесенные в файл при последней фиксации в репозитории. Если в этом коммите не задействован рассматриваемый файл, то ^ фактически является избыточным. Переходя к сводке удаления и извлечения, вы просто хотите отменить незафиксированные изменения, и в этом случае ответ Реми - тот, который вы хотите.   -  person phils    schedule 16.06.2013


Ответы (2)


В magit вам просто нужно перейти к фрагменту или файлу, который вы хотите восстановить, и использовать k, чтобы отменить модификацию. См. Соответствующую документацию на странице https://magit.vc/manual/1.4/magit/Staging-and-Committing.html для получения более подробной информации.

person Rémi    schedule 16.06.2013
comment
Действие зависит от того, где вы его используете. Он удалит файл, если файл не отслеживается git. Но если файл отслеживается, он отменяет модификацию. Обратите внимание: как только ваш файл находится в git, его трудно полностью удалить из истории. - person Rémi; 17.06.2013
comment
Я думаю, что это вполне разумно также можно использовать в обратном порядке, после commit: если вы зафиксировали файл вместе с другими изменениями, вы можете revert с помощью v, а затем k обратные изменения, где вы хотите сохранить изменения. - person lukstafi; 24.09.2013

Открыв файл, вы можете M-x magit-file-checkout.

person Razzi Abuissa    schedule 04.04.2016
comment
какая версия emacs / magit? - person dr jerry; 01.05.2016
comment
Доступно с Magit 2.3.0. - person Razzi Abuissa; 02.05.2016
comment
magit-checkout-file устарел, используйте вместо него magit-file-checkout. - person xged; 21.04.2017