Введение
vim
однозначно лучший (ИМХО) редактор для редактирования любого текста на компьютере и git
для ведения версий. При работе с git
довольно часто случаются конфликты при ветках merging
или rebasing
, но, к сожалению, я не нашел удобного способа разрешения конфликтов. В подобных ситуациях я прибегал к vscode
, у которого был отличный интуитивный способ сделать то же самое. Здесь я рад сообщить, что наконец-то достиг vscode
уровня интуитивности и комфорта в vim ‹3. Следите за ноу-хау.
Цель
Разрешите конфликт, возникший из-за слияния двух веток git
в vim.
Шаги
После того, как вы объединили ветки, вы можете сделать :Gstatus
внутри vim, чтобы увидеть статус файлов.
- Нажмите Enter на файле, конфликты которого вы хотите разрешить.
- Вышеупомянутый шаг откроет файл в новом буфере.
- Перейдите к буферу, в котором открыт конфликтующий файл, затем выполните
:Gvdiffsplit
, чтобы открыть файл в трехстороннем разделении, как показано ниже.
Левое разделение называется ветвью target
, это текущее состояние файла при попытке слияния, т.е. текущие изменения. Средняя — это копия working
, в которой фиксируется разрешенное конечное состояние. Крайний правый раздел называется ветвью merge
, в нем есть изменения из ветки, которая объединяется, с веткой, на которой мы находимся, т. е. входящие изменения.
4. Вы можете перейти к следующему конфликту, используя ]c
, и к предыдущему конфликту, используя [c
.< br /> 5. В каждом конфликте вам нужно решить, какие изменения вы хотите, либо вы можете принять изменения из ветки target
, выполнив :diffget //2
, либо вы можете принять изменения из ветки merge
, выполнив :diffget //3
, все из ветки working
. Вы также можете использовать :diffput
, но я предпочитаю :diffget
.
6. Если подсветка синтаксиса не меняется даже после разрешения конфликта, вы можете использовать :diffupdate
для обновления рабочей копии. Хорошо сделать :diffupdate
после разрешения конфликтов.
7. Если вы хотите внести оба изменения, лучшим вариантом будет ручное копирование из target
и merge
разбиений.
8. Вы также можете использовать :Gwrite
на любом target
или раздел merge
, который вы хотите полностью изменить.
9. После того, как все конфликты разрешены, вы можете выполнить :only
из раздела, который хотите сохранить, и выйти из режима vimdiff
.
Вывод
После разрешения конфликтов вы должны выполнить git merge --continue
после подготовки изменений, выполнив git add <files>
.
Существует несколько способов разрешения конфликтов, позвольте мне рассказать, как вы это делаете, в vim ;)
Найди меня в твиттере
Первоначально опубликовано на https://souvikhaldar.info 28 сентября 2020 г.