Может быть полезно знать, что в git нет такой вещи, как «перемещение» файла.
Допустим, вы перемещаете / my / path / file.txt в другой каталог, / my / other / path . Полный путь - это имя файла. Так что git знает, что в этой истории есть два файла, один с именем / my / path / file.txt , а другой с именем / my / other / path / file.txt . Они не связаны друг с другом каким-то магическим образом, как в вашем уме. Вы называете это перемещенным. На git первый файл был удален, а второй был создан.
Теперь верно, что иногда когда / my / path / file.txt удаляется и создается my / other / path / file.txt , git может объединить это в идею «переименования» файла - то есть Путь к файлу, который находился в одном каталоге, теперь изменился, и теперь он появляется в другом каталоге, но для того, чтобы это работало, они должны быть идентичными «одним и тем же» файлом, то есть их содержимое должно быть одинаковым.
В противном случае , и вообще, когда вы «перемещаете» файл, git видит, что один файл был удален, а другой был создан. И изменение содержимого файла и при его перемещении после одной фиксации, но перед другой, вероятно, приведет к тому, что git увидит, что один файл просто исчезает (удаляет), а другой появляется (создает).
Итак, у вас в голове есть человеческое представление о том, что «файлы были только перемещены, поэтому сделанные мной изменения все еще сохраняются», но git думает иначе. Git - это компьютер. Он видит, что в одной ветке файл с именем / my / path / file.txt исчез (потому что он был «перемещен», как вы полагаете). Но в ветке other файл с именем / my / path / file.txt остался на месте и был отредактирован!
Ну, это два разных изменения на тот же файл : удалить или изменить. Теперь git не знает, что делать.
(Между тем, git также видит, что в первой ветке файл с именем / my / other / path / file.txt был создан, но он никоим образом не связывает его ни с одним из двух файлов, о которых мы только что говорили.)
В конце концов, вы должны решить, что вы хотите здесь сделать. Я должен признать, что, даже будучи человеком, мне неясно, какое, по вашему мнению, должно быть разрешение. Похоже, что у вас действительно есть два файла: файл / my / other / path / file.txt , созданный в первой ветке, и файл / my / path / file.txt удален в первой ветке, но отредактирован во второй ветке. Я не могу представить, как вы собираетесь поступить на этом этапе. Вы, конечно же, не хотите, чтобы оба эти файла продвигались вперед. Но где вы хотите отредактировать файл? Даже я не знаю ответа на этот вопрос.
Значит, вам нужно ответить на этот вопрос. Вы, вероятно, захотите это на новом месте. Так что в этом случае, как мне кажется, лучше всего прервать слияние, переместить / my / path / file.txt в / my / other / path / file.txt во второй ветке и снова запустите слияние.
Я также хотел бы добавить, что конфликты сами по себе не являются плохим явлением! Все, что они означают, это то, что git не может полностью автоматически сгенерировать фиксацию слияния; он не знает, что вы хотите. По-видимому, вы это делаете, поэтому вы просто говорите это (сделав эту часть слияния фиксацией вручную). В целом, термины «конфликт слияния» и «разрешение конфликта» вводят в заблуждение; мы должны мыслить исключительно в терминах позитивной деятельности «создать (или подготовить к созданию) фиксацию слияния», которую либо git может сделать автоматически, либо вы и git можете сделать вместе, совместно.