Подтвердить что ты не робот

Git слить конфликт из-за переименования в два ветки - как исправить и избежать в будущем?

У меня есть две локальные ветки master и dev. Обе ветки содержали три папки:

projectBeta
project
project_v1

Я хотел просто сохранить projectBeta и удалить project и project_v1, а затем переименовать projectBeta как project. Так что то, что я делал отдельно на обоих ветвях, совершал, когда я шел. Все выглядело хорошо, пока я не попытался объединить ветвь dev для управления, и я получил кучу таких ошибок:

CONFLICT (rename/delete): Rename projectBeta/test.c->project/test.c in dev and deleted in HEAD
CONFLICT (rename/delete): Rename project_v1/test.c->project/test.c in HEAD and deleted in dev

Итак, похоже, что Git отслеживает переименования по-разному в разных ветвях.

Если я делаю git status, я получаю

# On branch master
# Unmerged paths:
#   (use "git add/rm <file>..." as appropriate to mark resolution)
#
#   added by us:        project/test.c
#
no changes added to commit (use "git add" and/or "git commit -a")

Во-первых, я не понимаю, почему статус просто говорит, что он "добавлен нами", когда в отчете о слиянии говорится, что он переименован и удален как нами, так и им?

Во-вторых, я хочу использовать версию ветки dev (test), но теперь, когда я пытаюсь

git co --theirs project/test.c

Я получаю

error: path 'project/test.c' does not have their version

... поэтому я не знаю, как обеспечить, чтобы слияние использовало контент из ветки dev?

Наконец, есть ли лучший способ избежать такого беспорядка, подобного этому в будущем? В принципе, изменение структур папок независимо в ветвях, где содержимое не готово к слиянию сначала...

4b9b3361

Ответ 1

Вам нужно git mv и git rm.

Мое предположение: вы, вероятно, rm'd каталоги, не сообщив git. Вы должны сообщить git, потому что он отслеживает все папки и должен знать, как правильно с ними справиться.

Что вам нужно сделать:

git rm -r project
git rm -r project_v1
git mv projectBeta project

Ответ 2

попробуйте это

git pull

перейдите в папку для удаления проекта и project_v1, переименуйте projectBeta для проекта.

git add --all
git commit 
git push

и вы делаете то же самое для другой ветки