Как мне зафиксировать все, что git автоматически сливается? (временно игнорируя конфликты)

Я нахожусь в середине git merge --squash --no-commit операция. Некоторые файлы были успешно объединены с помощью git, в то время как некоторые другие файлы помечены как "оба измененные" (без изменений).

Я хочу зафиксировать все, что git смог объединить (включая частичные изменения внутри конфликтующих файлов), оставив, таким образом, только фактические "конфликтующие секции", которые будут рассматриваться позже, в другом коммите.

Обратите внимание, что если я просто позвоню git commit Я получил:

error: commit is not possible because you have unmerged files.
hint: Fix them up in the work tree, and then use 'git add/rm <file>'
hint: as appropriate to mark resolution and make a commit.
fatal: Exiting because of an unresolved conflict.

2 ответа

Просто git add файл до фиксации, даже с информацией о конфликте.

git merge conflicting-branch
git add ./conflicting-file
git commit ...

Это "обходной путь", который я использую, но он довольно утомителен:

Чтобы преобразовать необработанные изменения в неустановленные изменения, вызовите git reset HEAD для каждого распакованного файла. Интересно, есть ли лучший способ (git reset имеет --merge флаг, но он не делает то, что мне нужно).

Теперь фиксация "работает", но некоторые полезные изменения (то есть: изменения, которые git автоматически разрешаются) останутся неизменными только потому, что они находятся внутри конфликтующих файлов. Чтобы добавить эти полезные изменения, позвоните git add -p и пройти их все (ставить каждый кусок, который не является частью конфликта).

Завершить с git commit (сейчас git diff вернет только конфликты и git difftool будет функционировать так же, как git mergetool сработало бы при слиянии "в правильном направлении").

Другие вопросы по тегам