Это не имеет ничего общего с letter.txt . Это о bugfixcode.cs .
Что за вишня? Это слияние выполняется так, как если бы родительский целевого коммита (коммит, названный в конце команды cherry-pick
) был предком обоих коммитов (целевой коммит и коммит, которым мы являемся HEAD
).
Другими словами, это воспроизведение (на HEAD
) diff (патча), которое доставит вас от родителя целевого коммита к целевому коммиту. .
Итак, у вас есть это:
--- A has no file x
\
\--- B creates file x --- C modifies file x
Итак, теперь вы пытаетесь выбрать вишню C на A. Это означает: переиграть B-to- C diff на вершине A. Вы говорите: «Пожалуйста, сделайте со мной, A, что вы сделали с B, чтобы получить C.»
Хорошо, что сделал вы делаете с Б, чтобы получить C? В чем есть разница между B и C? Это модификация файла x . Но в A нет файла x вообще! Так что же значит , что означает? Как мы можем, начиная с А, изменить файл, которого даже нет? Git понятия не имеет, поэтому он вскидывает руки.
(Та же проблема не существует, если вы выберете B на A, потому что очевидно, что это за разница: создайте файл.)
Чтобы увидеть это в контролируемом Кстати, просто разыграть сценарий. Следите за файлом, который я называю file2 :
git init
echo "howdy" > file
git add .
git commit -m "start"
git branch mybranch
git checkout mybranch
echo "test" > file2
git add .
git commit -m "created file2"
echo "test" >> file2
git add .
git commit -m "modified file2"
git checkout master
git cherry-pick a5d16cb4
Что мы получаем? Конфликт. И сообщение об ошибке ясно говорит нам, что это такое:
error: could not apply a5d16cb... modified file2
hint: after resolving the conflicts, mark the corrected paths
hint: with 'git add <paths>' or 'git rm <paths>'
hint: and commit the result with 'git commit'
Прочитайте слова. Проблема в том, что C "модифицированный файл2". И предлагаемое решение состоит в том, чтобы add
или rm
проблемный файл c, file2 .
Другой способ понять, в чем заключается проблема, - это сделать на этом этапе git status
. Вот что мы получаем:
On branch master
You are currently cherry-picking commit a5d16cb.
(fix conflicts and run "git cherry-pick --continue")
(use "git cherry-pick --abort" to cancel the cherry-pick operation)
Unmerged paths:
(use "git add/rm <file>..." as appropriate to mark resolution)
deleted by us: file2
Опять же, нам говорят, что проблема в file2 , и что решение - это add
или rm
. Фраза «удалено нами» на самом деле весьма полезна, и вы можете использовать ее, чтобы express решить проблему, возможно, лучшим способом. Помните, мы пытаемся объединить diff B-to-A с diff B-to- C. Таким образом, относительно B, который уже имеет файл, A удаляет файл, а C изменяет файл. Вы не можете сделать и то и другое - это конфликт.
Так что проблема заключается в файле, созданном и измененном в вашей ветке second
. И именно поэтому вы не видите конфликта в файле, созданном и измененном в master
; это не конфликт.