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

Проблема слияния вверх по течению меняется обратно в мою ветку

Я столкнулся с конфликтами, пытаясь слить восходящие изменения обратно в свою ветку, и я не уверен, как их разрешить.

Я создал свою собственную вилку. Я клонировал его. Я внес изменения в ветку на своей вилке, совершил и толкнул. Но тогда основной вилок обновился, и я попытался обновить свою собственную вилку, объединив вверх по потоку так:

$ cd repo-name
$ git remote add upstream git://github.com/username/repo-name.git
$ git fetch upstream
$ git merge upstream/master

Слияние говорит, что некоторые проблемы с файлом и автоматическое слияние не работают. Он говорит мне, чтобы я сам его исправил и снова объединил. Поэтому я фактически перешел в репозиторий (вверх по течению) на GitHub основной вилки и скопировал весь код нового файла в файл на своей вилке и попытался снова объединиться. Тогда git дает мне эту ошибку:

fatal: "merge" невозможен, потому что у вас есть несвязанные файлы. Пожалуйста, исправьте их в дереве работ, а затем используйте 'git add/rm' as подходящий для отметки разрешения и совершения фиксации, или используйте 'git commit -a'.

Есть ли какой-то аргумент, который я оставляю? Я что-то делаю глупо? Что это означает "безмятежные файлы"? Разве не все сливается, чтобы объединить файлы? Должен ли я выполнять свои изменения до слияния?

4b9b3361

Ответ 1

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

Ответ 2

Команда "git merge" пытается включить изменения из другой ветки в текущую ветку. Если слияние чистое, что означает отсутствие конфликтов, оно будет зафиксировано. Поскольку у вашего слияния были конфликты, он не совершал. Вам необходимо разрешить конфликт.

Вытягивание копии из восходящего репо - это один из способов сделать это - приняв версию репозитория вверх по течению. Вы можете сделать это в git, используя "git checkout - theirs conflicting_file.txt"

Редактирование файла, чтобы получить его в нужную вам форму, - это еще один способ.

После исправления вам нужно добавить с помощью "git add conflicting_file.txt", а затем зафиксировать. Тогда ваша рабочая копия чиста и готова для большего взлома. Удачи.

Ответ 3

В Git есть случаи, когда merge отказывается даже начинать, чтобы защитить ваши локальные изменения. Это может произойти в двух случаях:

  • У вас есть незафиксированные изменения в вашем репозитории, которые конфликтуют с объединением. Git откажется выполнять слияние со следующим сообщением:

    error: Your local changes to the following files would be overwritten by merge:
            foo
    Please, commit your changes or stash them before you can merge.
    Aborting
    

    Затем вы должны либо перенести изменения сначала (git commit -a, либо git add + git commit), либо скопировать их с помощью git stash save.

  • находится в середине некоторой незавершенной операции слияния. Был некоторый конфликт, например

    Auto-merging foo
    CONFLICT (content): Merge conflict in foo
    Automatic merge failed; fix conflicts and then commit the result.
    

    и вы не закончили разрешать конфликты (путем редактирования файлов и их маркировки с помощью git add или с помощью какого-либо инструмента для графического слияния с помощью git mergetool) и не создавали окончательное слияние с git commit -a, или прервал слияние с git reset --hard ( ПРИМЕЧАНИЕ:, это отбросит все ваши изменения, и вы потеряете работу по разрешению конфликтов!!!).

    Или вы просто запустили второй git merge слишком быстро или использовали git merge вместо git commit для создания фиксации слияния.

    error: 'merge' is not possible because you have unmerged files.
    hint: Fix them up in the work tree,
    hint: and then use 'git add/rm ' as
    hint: appropriate to mark resolution and make a commit,
    hint: or use 'git commit -a'.
    fatal: Exiting because of an unresolved conflict.
    

    Разрешать конфликты, как описано, например. в старой Fun с завершением слияния в статье Junio ​​C Hamano и завершить слияние с git commit или выбросить слияние или спрятать его. Затем, если вы хотите создать это второе слияние, вы можете это сделать.

Sidenote: по умолчанию git Приглашение командной строки -aware показывает, находится ли вы в середине слияния, переустанавливаете или применяете исправления (git am операция). Вы также можете настроить его, чтобы показать, загрязнен ли рабочий каталог (отличается от последней версии, то есть HEAD).

Ответ 4

После того, как вы решили слияние, вам нужно использовать git add, чтобы добавить файлы, которые вы изменили в индекс, а затем зафиксировать (например, сообщение). Это говорит git "Да, я действительно хочу внести эти изменения".

Помните, всегда используйте git add перед тем, как совершить (как обычно, или слияние), если вы используете интерфейс командной строки. Фронтальные элементы, такие как magit, могут оптимизировать это для вас, поэтому вам не нужно беспокоиться о том, чтобы каждый раз вводить "git add".

Ответ 5

Запустите git commit (после добавления файлов) второй раз, а не git merge.

Также разрешение конфликтов создаст файлы, которые помогут вам объединиться. См. Также git mergetool.