2013-06-16 4 views
52

Вопрос только в главном режиме Magit для функции Emacs и меньше о том, как это сделать с помощью интерфейса командной строки.Magit revert single file

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

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

По существу, на что я надеялся сделать, это:

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

  • тянуть из местного репо.

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

+0

(1) Буфер истории Magit определенно поддерживает это (хотя я не помню, как), вам нужны другие средства (например, в '* magit-status *')? (2) Если вы хотите вернуться к базе, почему бы не использовать малый режим 'vc'' C-x v u'? – lukstafi

+0

Вы говорите об отмене незавершенных изменений (т. Е. О возврате к текущей версии) или о возврате к предыдущей фиксации? 'git checkout HEAD file' отменит незафиксированные изменения. 'git checkout HEAD^file' также вернет изменения (если они есть), сделанные в файл в последней фиксации в репозитории. Если это сообщение не связано с данным файлом, то '^' эффективно избыточно. Следуя сводке «удалить и вытащить», вы просто хотите отказаться от незафиксированных изменений, и в этом случае ответ Реми - тот, который вы хотите. – phils

ответ

66

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

+1

Действие зависит от того, где вы его используете. Он удалит файл, если файл не отслеживается git. Но если файл отслеживается, он отменяет модификацию. Обратите внимание, что как только ваш файл находится в git, его невозможно полностью удалить из истории. –

+2

Я думаю, что это вполне разумно также можно использовать в обратном порядке после 'commit': если вы перенесли файл вместе с другими изменениями, вы можете' revert' с 'v', а затем' k' инверсные изменения там, где вы хотите для сохранения изменений. – lukstafi

12

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

+0

какая версия emacs/magit? –

+0

Доступен с Magit 2.3.0. –

+2

'magit-checkout-file' устарел, вместо этого используйте' magit-file-checkout'. – xged