Конфликт Git rebase: многие файлы удалены локально и изменены на удаленном компьютере. Как "все"?
Я нахожусь на ветке и перебираю на мастера, и истории разошлись. В функции были удалены десятки файлов, которые были одновременно изменены на мастер. Я уверен, что эти файлы мне больше не нужны, так что сделайте ребаз, оставив все как есть:
git rebase -Xtheirs master
Он принимает все изменения, которые я сделал в компоненте, но все еще оставляет конфликты для модифицированных файлов из master, которые были удалены в компоненте, сообщая:
CONFLICT (modify/delete): some/file1 deleted in HEAD~3 and modified in master. Version master of some/file1 left in tree.
А также
Unmerged paths:
(use "git reset HEAD <file>..." to unstage)
(use "git add/rm <file>..." as appropriate to mark resolution)
deleted by them: some/path/file1
deleted by them: other/path/file2
deleted by them: another/path/file3
...
И есть их миллион. я должен бежать git rm some/path/file1
для каждого из них. Есть ли простой способ перечислить все удаленные ими файлы и передать их git rm
автомагически?
Обновление: если вы хотите попробовать это, вот очень маленький пример репозитория GitHub с этой ситуацией. Функция клонирования и оформления заказа, затем попытайтесь выполнить ребазинг на мастер.
git clone https://github.com/chhh/git-rebase-conflict-resolution
git checkout feature
git rebase -Xtheirs master
1 ответ
TL;DR; один лайнер:
git ls-files --stage | awk -v stage=3 -v path=4 '$stage == 2 {print $path}' | xargs git rm
Отвечая на мой собственный вопрос, спасибо за комментарий к исходному вопросу от @torek.
git ls-files --stage
выведет список удаленных ими файлов как имеющий этап == 2.
Таким образом, используя awk
а также xargs
Полностью один лайнер для вызова git rm
на всех них есть:
git ls-files --stage | awk -v stage=3 -v path=4 '$stage == 2 {print $path}' | xargs git rm
Запустите его без финального xargs, чтобы проверить, какие файлы будут удалены.
Попробуй сам
Вот очень маленький пример репозитория GitHub с такой ситуацией. Функция клонирования и оформления заказа, затем попытайтесь выполнить ребазинг на мастер.
git clone https://github.com/chhh/git-rebase-conflict-resolution
git checkout feature
git rebase -Xtheirs master
Если единственные конфликты, которые у вас есть, - это не объединенные пути, "удаленные ими", я думаю, что просто
git add -u
решит ситуацию.