В git, как я могу избежать конфликтов, объединяющих незначительные исправления в ветку, где строка новой информации была вставлена ​​между каждой строкой оригинала? - PullRequest
0 голосов
/ 20 апреля 2020

Кто-то спросил , почему на первый взгляд возможное слияние с использованием git имеет конфликты с кодом, похожим на мой, но (1) мой немного отличается и (2) я ищу решение проблемы не просто объяснение.

edit: это то, что мне нужно сделать для многих файлов, очень часто. Я также должен обучить нетехнических людей, чтобы быть в состоянии сделать это. Вручную объединение каждого конфликта было бы прерывателем сделки для моего варианта использования.

Файл в ветви master начинается как:

my name is dennis
i am a dolphin
i fix teeth

Я создаю ветку с именем analysis_1 и зафиксировать эти изменения:

my name is dennis
analysis of line 1
i am a dolphin
analysis of line 2
i fix teeth
analysis of line 3

Понимая мою предыдущую ошибку, я извлекаю master и фиксирую исправление:

my name is dennis
i am a dentist
i fix teeth

Есть ли способ (стратегия, алгоритм или GIT_EXTERNAL_DIFF) инструмент), который может сливаться master в analysis_1 без конфликта, так что я могу сохранить исправление и анализ, как показано ниже?

my name is dennis
analysis of line 1
i am a dentist
analysis of line 2
i fix teeth
analysis of line 3

Спасибо!

edit 2: Этот вопрос указал на wdiff и заставил меня попробовать diff параметр --word-diff, который дает мне желаемый результат сравнения. Следующий шаг - использовать его для слияния.

edit 3: Похоже, слияние на основе слов имеет некоторые вопросы по SO, которые могут принести свои плоды. Я обновлю этот вопрос, если найду решение в одном из тех, которые работают для этого.

1 Ответ

0 голосов
/ 20 апреля 2020

Проблема в том, что вы пытаетесь редактировать master, добавляя коммит, задачей которого является изменение прошлого, после того, как analysis_1 уже разветвлен. Лошадь покинула сарай, и с этим ничего нельзя поделать.

Когда вы внесли изменения в analysis_1 и , тогда вы обнаружите, что одна строка, перенесенная с master, неправильно, место для исправления этой строки - analysis_1, а не master.

Если вы вносите такие изменения после факта в master или учите других делать это, то это неправильное использование git и вам нужно прекратить это делать.

...