Здравствуйте!
При изучении git столкнулся с непониманием как оно должно работать в случае копирования веток.
Поговаривают, что cherry-pick берет git diff -U0 feature^ HEAD и копирует его в HEAD, но у меня не получилось .
Вот список моих коммитов:
spoiler
$ git log --oneline
5cab6cb (HEAD -> feature) Add D
a3f623d Add C
9b26f0e Add B
f5f7ec0 (master) Add A
449d5e5 Add .keep
В проекте один файл; в файле на каждый коммит приходится одно добавление строки указанное в комментарии.
Вот мой git diff -U0 feature^ HEAD:
spoiler
Anton@anton-home-001 MINGW64 /k/dev/git/test_2 (feature)
$ git diff -U0 feature^ HEAD
diff --git a/script.txt b/script.txt
index 05c9ba8..aa5292a 100644
--- a/script.txt
+++ b/script.txt
@@ -6,0 +7,2 @@ C
+D
+
А вот что я получаю, когда выполняю cherry-pick:
spoiler
Anton@anton-home-001 MINGW64 /k/dev/git/test_2 (master)
$ git cherry-pick feature
Auto-merging script.txt
CONFLICT (content): Merge conflict in script.txt
error: could not apply 5cab6cb... Add D
hint: after resolving the conflicts, mark the corrected paths
hint: with 'git add ' or 'git rm '
hint: and commit the result with 'git commit'
Ок. Возник конфликт. Но почему? В ветке master после начала добавления коммитов в ветку feature не делались коммиты и в ветке feature только добавлялись строки.
Что в файле конфликта:
spoiler
A
<<<<<<< HEAD
||||||| parent of 5cab6cb (Add D)
B
C
=======
B
C
D
>>>>>>> 5cab6cb (Add D)
И как видно тут совсем не "diff -U0 feature^ HEAD", а что-то вроде "$ git diff -U0 master...feature", т.е. то что мне добавил cherry-pick больше похоже на то, что сделал бы merge, кроме метаданных, которые копируются.
1. Это я неправильно понимаю как должна работать эта команда или здесь что-то пошло не так?
2. Каков алгоритм работы cherry-pick?
3. Если cherry-pick работает также как merge, то может лучше тогда делать для копирования squash?