Как выбрать весь REMOTE файл во время mergetool? - PullRequest
2 голосов
/ 30 марта 2019

Я использую CLI mergetool vimdiff и вместо того, чтобы идти построчно и вводить :diffg RE для каждого изменения, чтобы выбрать УДАЛЕННУЮ версию, есть ли способ, которым я могу просто использовать УДАЛЕННУЮ версию всего файла в качествецель слияния?

Ответы [ 3 ]

2 голосов
/ 30 марта 2019

(альтернатива CLI)

Я знаю, что на самом деле это не отвечает на ваш вопрос, как есть, но если вам нужно взять все с одной стороны дляконкретный конфликтующий файл в слиянии , вам даже не нужен инструмент.

Вы можете проверить нужную версию файла (проверьте документ здесь и там ), а затем add, чтобы разрешить конфликт:

git checkout --ours path/to/file
# or
git checkout --theirs path/to/file

# and then to conclude the resolution
git add path/to/file

Обратите внимание, что вы также можете, если пожалеете об этом шаге, вернуть его в нерабочее состояние с маркерами конфликта, набрав

git checkout -m path/to/file
1 голос
/ 01 апреля 2019

В mergetool, если у вас более 2 буферов, вы не можете использовать :diffget, так как Vim не знает, из какого файла получить diff.

Однако, когда вы решаете конфликт (вам нужно запустить mergetool), у вас есть несколько файлов, созданных Git для управления конфликтом:

Unmerged paths:
  (use "git reset HEAD <file>..." to unstage)
  (use "git add <file>..." to mark resolution)

    both modified:   my/conflicting/file.py

Untracked files:
  (use "git add <file>..." to include in what will be committed)

    .env
    my/conflicting/file.py.orig
    my/conflicting/file_BACKUP_5038.py
    my/conflicting/file_BASE_5038.py
    my/conflicting/file_LOCAL_5038.py
    my/conflicting/file_REMOTE_5038.py

Они представляют разные стороны конфликта:

  • BACKUP - копия файла с маркерами конфликтов,
  • LOCAL - ваше текущее состояние до конфликта,
  • BASE содержит состояние файла при общей фиксации предка между вашей локальной версией и слитой (или применяется в случае ребазирования, выбора вишни или всплытия / применения тайника),
  • REMOTE - это коммит, который пытается быть применен <--- это та версия, которую вы хотите в вашем случае </li>

Итак, вы можете скопировать файл _REMOTE_ в качестве текущего (cp path/to/file_REMOTE_* path/to/file) или в mergetool скопировать содержимое _REMOTE_ (:%y) и заменить его содержимым вашего файла. (ggVGp, перейти наверх, перейти в режим визуальной линии, перейти к концу, вставить).

1 голос
/ 31 марта 2019

Краткий ответ:

Используйте :%diffget, чтобы получить все куски.


Пояснение:

diffget принимает - как большинство команд vim - диапазон. Процитирую vimhelp:

                                                        :diffg :diffget
:[range]diffg[et] [bufspec]
                Modify the current buffer to undo difference with another
                buffer.  [...]
                See below for [range].

[...]

When no [range] is given, the diff at the cursor position or just above it is
affected.  When [range] is used, Vim tries to only put or get the specified
lines.

% заменяется текущим именем файла (см. :help c_%). Если задан диапазон, это означает использование всех линий.

...