Як я можу скасувати зміну файлу у вікні статусу втікачів?


33

Коли у вікні статусу втікача плагіна , до якого звертається , можна відрізняти зміни для файлу з використанням та перемикання файлів для використання фіксації .:GstatusD-

Чи є якийсь подібний ярлик для відміни змін, я маю на увазі еквівалент git checkout -- filename?

Оновлення:

Знайдено запит на функцію на сторінці втікачів github Випуск № 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/isissue/97

Звернутись:
https://github.com/tpope/vim-fugitive/commit/061a81f247538aeb61e165e1551355f289d52f63


Якщо це недокументовано, це може бути визнано небезпечним. Хіба не важко було б дізнатися, що ви присвоїли свої локальні зміни через незадокументований магічний набір клавіш?
вересня

2
2019 Оновіть зараз ЦеX
Огуз Більгік

хтось із правами редагування, будь ласка, відредагуйте його на X?
chriz

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>

це чудово працює, лише недоліком є ​​те, що я отримаю діалогове вікно, що файл змінився на диску, і якщо я хочу його перезавантажити. Було б добре, якби мовчав.
tidbeck

1
Це ще краще IMO, оскільки ви отримуєте підтвердження того, що файл насправді повернено. Але автоматичне безшумне перезавантаження може бути виконано за допомогою параметра "autooread" ( :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.