Как я могу отменить изменение файла из окна состояния беглецов?


33

Когда в беглеца-плагин окна статуса , доступ с помощью :Gstatus, то можно дифф изменения для файла , используя Dи тумблер файлы для фиксации при помощи -.

Есть ли аналогичный ярлык для отмены изменений, с отказом, который я имею в виду эквивалент git checkout -- filename?

Обновить:

Обнаружен запрос функции на странице GitHit беглецов Проблема № 97: Ярлык для извлечения / удаления файлов

В соответствии с этим предпочтительным способом является использование :Gread :w

Обновление 2:

С июня 2014 года можно использовать, Uкак ответил Ансон ниже .

Обновление 3: с 3 января 2019 года привязка клавиш отображается наX

Ответы:


27

Эта функциональность была добавлена ​​в июне 2014 года и по умолчанию сопоставлена ​​с U.

Эта часть информации находится в файле справки под :h :Gstatus:

     U     |:Git| checkout HEAD

Запрос и обсуждение функции:
https://github.com/tpope/vim-fugitive/issues/97

Фиксация:
https://github.com/tpope/vim-fugitive/commit/061a81f247538aeb61e165e1551355f289d52f63


Если это недокументировано, это может быть истолковано как небезопасное. Разве не трудно было бы узнать, что вы сузили свои локальные изменения из-за недокументированного волшебного нажатия клавиш?
sehe

2
2019 Обновление сейчас ЭтоX
Огуз Билгич

кто-нибудь с правами на редактирование, пожалуйста, отредактируйте его в X?
Крис

15

Вы можете использовать беглую «s Greadкоманду , чтобы заменить содержимое буфера с различными альтернативными версиями файла в буферах (т.е. это должно быть сделано из буфера виде файла, а не из :Gstatusбуфера).

  • :Gread(без аргументов) будет использовать версию файла из индекса .
  • :Gread - будет использовать версию файла из коммита HEAD.

См. Документацию :help fugitive-revisionпо списку других спецификаций ревизий, которые поддерживает беглецы (две из них, вероятно, являются наиболее полезными).

:GreadРабочий процесс протекает следующим образом:

  1. :Gread
  2. Беглец очищает текущий буфер и читает содержимое из индекса
  3. Результат : буфер теперь имеет то же содержимое, что и индекс. Файл рабочего дерева не изменяется.
  4. Вы можете выполнить :wсохранение файла в рабочем дереве (или использовать, :Gread|wесли знаете, что хотите сохранить его сразу).

:Git checkout -- %Рабочий процесс протекает следующим образом:

  1. :Git checkout -- %
  2. Git копирует версию файла в индексе в файл в рабочем дереве.
  3. Vim замечает, что файл был изменен вне редактора, и предлагает вам проигнорировать или перезагрузить его.
  4. Вы говорите Vim, чтобы перезагрузить файл.
  5. Результат : и файл рабочего дерева, и буфер теперь содержат содержимое из индекса.

Сводка: :Greadисключает приглашение «файл изменился с момента начала редактирования» и позволяет вам решить, когда вы хотите изменить файл в рабочем дереве.


Когда буфер представляет стадию индекса файла вместо файла из рабочего дерева, :Greadсчитывает содержимое файла так, как оно существует на диске в рабочем дереве вместо стадии 0 индекса.


Отображение для gstatus, чтобы восстановить файл:au FileType gitcommit nmap <buffer> U :Git checkout -- <c-r><c-g><cr>
majkinetor

1

Сопоставление gstatus для восстановления файла:

au FileType gitcommit nmap <buffer> U :Git checkout -- <c-r><c-g><cr>

это прекрасно работает, единственным недостатком является то, что я получу диалоговое окно, в котором файл был изменен на диске, и если я хочу перезагрузить его. Было бы хорошо, если бы было тихо.
Тидбек

1
Это даже лучше IMO, так как вы получаете подтверждение того, что файл действительно восстановлен. Но автоматическая перезагрузка в режиме без вывода сообщений может быть выполнена с помощью опции 'autoread' ( :help autoread). Другое, что вы могли бы в bufdo eтечение выше au.
майкинетор

0

Ну, ты пробовал :help fugitive?

Видимо нет, для этой функции Git нет ярлыка.


Да, я сделал. Были времена, когда я не нашел в справке функции, которая присутствовала, тем не менее. Вы считаете, что вам никогда не следует спрашивать о функции, которой нет в справке для программы / плагина?
Tidbeck

Да, это случилось и со мной: была функция, которую я мог выполнять, :callно не имел связанной команды. Я не помню название плагина ... Выровнять? как бы то ни было, мое мнение таково, что нужно читать документы, прежде чем задавать вопросы. Что ты и сделал. Так что это круто. Но логичным вторым шагом после прочтения документации будет IMO, чтобы посмотреть на источник плагина и посмотреть, есть ли там какая-то полезная функция. Что вы должны сделать. Но, AFAIK, беглец не имеет дело git checkoutвообще, поэтому ваши шансы невелики. Возможно, вам придется вернуться к :!git checkout -- filename.
romainl

Хорошо, спасибо за разъяснения. Я думаю, что вы делаете правильное замечание относительно взгляда на исходный код, но в то же время, если информация доступна только в исходном коде, это может быть действительным QA здесь. Приму ваш ответ и продолжу использовать :Git checkout -- %.
Tidbeck

0

Хотя это не имеет ничего общего с vim, подумал сказать вам, что я иногда делаю:

$ git status
...
#
#   modified:   .rvmrc
#   modified:   app/views/admin/base/index.html.erb
#   modified:   config/routes.rb
#
...

$ # mouse-copy the files i want to reset, and paste them into the next command

$ cat | xargs git checkout
app/views/admin/base/index.html.erb
config/routes.rb
^D

быстро заканчиваю работу

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.