GIT конфликт слияния: после создания новой ветки и удаления некоторых файлов - PullRequest
1 голос
/ 19 февраля 2020

У меня проблема со слиянием GIT. Фактически, у меня есть главная ветка с этой архитектурой:

.git
doc
   \__ some files

src
   \__ tools 1
              \__ some files

   \__ tools 2
              \__ some files

В моем проекте я разработал инструменты и добавлю другие инструменты в каталог "sr c". Для этого каждый раз, когда я хочу создать новый инструмент, я буду создавать новую ветвь с именем «tools3» из основной ветки, а затем удаляю все ненужные мне каталоги, здесь «tools 1», «tools 2» и « делать c». Причина в том, что мне не нужны документация и другие инструменты для разработки.

Так что теперь, после удаления, я кодирую свои «инструменты 3», фиксирую и помещаю их в новую ветку «tools3» , Пришло время объединить две мои ветки с git merge tools3 -m "Merge tools3 branch with master branch" (в основной ветке).

У меня две проблемы, во-первых, некоторые конфликты с файлами документации:

СООБЩЕНИЕ О КОНФЛИКТЕ: CONFLICT (modify/delete): doc/api_project.json deleted in tools3 and modified in HEAD. Version HEAD of doc/api_project.json left in tree.

Во второй раз объединение удаляет мои файлы "sr c" (те, которые я удалил ранее в ветке "tools3").

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

Ответы [ 3 ]

2 голосов
/ 19 февраля 2020

Вы не должны удалять файлы из репо, который вам не нужен. Это причина, по которой вы получаете конфликт (ы).

Пока вы работали в своем tools 3 каталоге, другие участники могли работать в них. Например, исправление ошибок, добавление новых функций и т. Д. c. Они завершили свою работу и выдвинули ее до master.

Когда пришло время выполнить вашу работу, история разошлась. С тех пор как вы начали свою ветку, с одной стороны вы удалили некоторые файлы, а с другой стороны эти файлы были изменены другими людьми. Git не может принять решение о правильном маршруте, поэтому возникает конфликт.

Вы действительно хотите удалить файл из git репо, только если он больше не нужен. для всего проекта и больше не нуждаются в его контроле. Мне кажется, вы удаляете их только потому, что хотите сохранить структуру каталогов «чистой», или по какой-то другой причине, о которой мы можем только догадываться.

0 голосов
/ 19 февраля 2020

Конфликт, с которым вы сталкиваетесь, связан с тем, что другой человек внес изменения в master в один из файлов, которые вы удалили в tools3. В результате при попытке слияния git необходимо выяснить, как применить изменения, внесенные в master, к файлу, который вы удалили до внесения изменений.

Визуальное представление :

*   - Added doc/api_project.json
|\
| * - Deleted doc/api_project.json
| |
* | - [master] Updated doc/api_project.json
  |
  * - [tools3] Dev work on tools

Как вы можете видеть выше, чтобы поместить эти коммиты в одну ветку, git необходимо знать, как применить изменения, сделанные в третьем коммите, к файлу, удаленному во втором коммите .

Вы не должны вносить какие-либо изменения в ветку, которые не относятся к функции, над которой вы работаете в этой ветке. Удаляя файлы, вы создали коммит, который удаляет эти файлы.

Надеемся, вы выполнили удаление как отдельный коммит (мы можем увидеть вывод git log для вашей ветки tools3?), Что будет означать все вам нужно сделать это удалить коммит из вашей ветки перед слиянием.

Удаление операций удаления решит обе ваши проблемы, у вас больше не будет конфликта, и файлы, которые удаляются из master ответвление (поскольку вы удалили их в tools3) больше не будет удалено.

0 голосов
/ 19 февраля 2020

Каждый раз, когда вы создаете новый инструмент, вы создаете ветку путем клонирования своей основной ветви. добавив новый инструмент во вновь созданную ветвь, вы сравниваете основную и вновь созданную ветки в фоновом режиме. Таким образом, независимо от того, какие новые изменения есть, они будут добавлены в основную ветвь, а какие измененные изменения будут обновлены / удалены из основной ветки. Поэтому вы не должны удалять код из какой-либо ветви, так как он будет удален во время слияния.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...