Как мне зафиксировать все, что 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
сработало бы при слиянии "в правильном направлении").