Как Git отличает изменения файла во время коммита слияния от тех же изменений, которые были внесены в файл при обычном коммите? - PullRequest
0 голосов
/ 04 мая 2018

Учтите, что я внес изменения в файл в личной ветке, и я хочу, чтобы моя ветка была объединена с другой веткой (скажем, development). Если кто-то еще внес изменения в те же строки в файле, на который я воздействовал, возникнет конфликт, который мне нужно разрешить, прежде чем моя ветвь может быть объединена. Я обычно делаю git pull origin development, после чего Git вызывает конфликты и позволяет мне их исправить. После того, как я их исправлю, если я открыл файл вручную без использования git mergetool, мне нужно git add файл, чтобы «пометить его как разрешенный», а затем я делаю git commit и принимаю коммит-слияние по умолчанию сообщение.

На этом этапе изменения, которые я внес в файл, станут единственным источником правды и переопределят изменения, внесенные в ветку development, так что, надеюсь, я не засорял работу этого человека.

Мой вопрос: откуда Git знает, что это коммит слияния? Я думаю, что он должен знать, потому что, если бы я сделал те же самые изменения в файле, который я сделал во время разрешения конфликта, а затем сделал git add и git commit, это по определению был бы конфликт. Пожалуйста, поправьте меня, если мое предположение неверно. Я задумался над этим вопросом, потому что удивлялся, почему мне нужно перенести все различия ветвей в свою ветвь, чтобы разрешить один простой маленький конфликтующий файл.

1 Ответ

0 голосов
/ 04 мая 2018

На этом этапе изменения, которые я внес в файл, станут единственным источником правды и переопределят изменения, внесенные в ветку development, так что, надеюсь, я не засорял работу этого человека.

«Переопределение» происходит во время фиксации слияния в вашей ветви. Коммиты слияния - это коммиты с несколькими родителями, содержащие информацию о том, как разрешать конфликты. Когда вы сливаете свою ветвь обратно в development, это не значит, что ваша ветвь стала «единственным источником истины»; дело в том, что конфликтующие коммиты из development уже существуют в его истории. Больше нет изменений development, сделанных вашей веткой, и ничего не нужно переопределять.

Итак, чтобы ответить на то, что вы указали в качестве вопроса напрямую:

Мой вопрос: откуда Git знает, что это коммит слияния?

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

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