У меня есть следующая ситуация в моей истории коммитов:
A1-...-A2
\
B1-B2-...-B3----------B4-B5
\ /
C1-C2-C3
Затем я сделал (после git checkout A2
и чистой git status
) git cherry-pick --no-commit C2..B5
. Теперь C2
ввел важную строку в file1.txt
, скажем,
file1.txt
-line x
+line x with new part
, и "строка x с новой частью" существует во всех коммитах от C2 до B5. Но после выбора вишни изменение не появляется, и file1.txt
по-прежнему выглядит как
...
line x
...
, где я ожидал линию "линия x с новой деталью". Я подумал, я не понимаю изменений и сделал
git diff HEAD C2 file1.txt
file1.txt
-line x
+line x with new part
, который показывает изменение, как и ожидалось. Я также проверил git diff HEAD C3 file1.txt
, git diff HEAD B4 file1.txt
и git diff HEAD B5 file1.txt
с тем же результатом.
git rev-parse HEAD
приводит к A2
, как и предполагалось, и git status
говорит: «В ветви A ваша ветка работает до дата с 'origin / A'. нечего коммитить, рабочее дерево чистое ".
Что мне не хватает? Есть идеи?
Ссылки:
Как выбрать диапазон коммитов и объединить их в другую ветку ,
Как объединить указанный c коммит в Git и
Извлечь все коммиты из ветки, pu sh указанные коммиты в другой (надеюсь, это не проблема с комментарием из ответа "... Аналогично, выбор вишни из одной ветви в другую в основном включает в себя создание патча, а затем его применение, что также приводит к потере истории. "Из ответа.).
Edit @ eftshift0: После git cherry-pick --no-commit C1..B5
на первый взгляд выглядит корректно:
Показывает различия
<<<<<<< HEAD
line x # current status of A2
||||||| parent of C2...
line x # common ancestors of C1 and A2
=======
line x with new part # from merge (new stuff)
>>>>>>> C2...
Из документов:
git -cherry-pick - Примените изменения, внесенные некоторыми существующими коммитами. ОБОЗНАЧЕНИЕ
ОПИСАНИЕ При наличии одного или нескольких существующих коммитов примените изменения, вносимые каждым, записав новый коммит для каждого. Это требует, чтобы ваше рабочее дерево было чистым (без изменений из коммита HEAD).