#git #git-merge #git-cherry-pick
#git #git-merge #git-cherry-pick
Вопрос:
У меня есть 2 ветки, скажем, master и feature.
Вот фактический журнал git master
ветки, из которого мне нужно 2 запроса на извлечение (# 174 и # 173) для объединения в мою функциональную ветку.
commit e6a35ad0b2363932ac190ec602a7fd0c8bf9f04f (HEAD -> master, origin/master, origin/HEAD)
Merge: a922cb0 f45db00
Author: xyz
Date: Wed Sep 2 17:55:32 2020 -0700
Merge pull request #174 from xyz/v4upgrade
readjust null values for string data type from v4
commit f45db00e1e4b1cce05eb1035b6bd3d3eab97f3bc
Author: xyz
Date: Wed Sep 2 17:32:07 2020 -0700
readjust null values for string data type from v4
commit a922cb0a5eb4bf2b7734af8041fb9cffcd2cee5f
Merge: 5f00c71 c9ab5c3
Author: xyz
Date: Tue Sep 1 23:42:48 2020 -0700
Merge pull request #173 from xyz/v4upgrade
Implementation for UI fields for user info API
Я хочу объединить pull request #173
и pull request #174
feature
разветвить.
Я пробовал фиксировать сбор вишни, но получал следующие ошибки:
git checkout feature
git cherry-pick e6a35ad0b2363932ac190ec602a7fd0c8bf9f04f
error: commit e6a35ad0b2363932ac190ec602a7fd0c8bf9f04f is a merge but no -m option was given.
fatal: cherry-pick failed
git cherry-pick a922cb0a5eb4bf2b7734af8041fb9cffcd2cee5f
error: commit a922cb0a5eb4bf2b7734af8041fb9cffcd2cee5f is a merge but no -m option was given.
fatal: cherry-pick failed
Комментарии:
1. Я думаю, вам нужно исправить то, что вы имеете в виду …. или ваше понимание слияния. Если вы объедините commit_id 3, это также перенесет изменения из коммитов 2 и 1 в ветку, над которой вы работаете. Итак, вопрос решен некорректно, если вы имеете в виду перенести изменения, внесенные этими 2 ревизиями (и тогда вы будете выбирать вишню).
2. Учитывая, что эти две ревизии являются ревизиями слияния (вот почему git жалуется), вы могли бы рассмотреть возможность выбора реальных ревизий вместо слияний в master?
3. @eftshift0 Извините за путаницу. Пожалуйста, ознакомьтесь с моими обновлениями.
4. @eftshift0 Не могли бы вы привести мне пример того, как выбрать реальные изменения? Вы имеете в виду вишневый выбор родительских коммитов?
5. Предоставлено в качестве ответа
Ответ №1:
Если вы хотите объединить изменения, поступающие от 2 PR, в другую ветку, затем выберите изменения, связанные с PR (независимо), из master в develop.
Скажем …. что-то вроде этого:
git checkout -b temp dev # will work on temp to cherry-pick revisions
# cherry-pick changes related to commit_id_3
git cherry-pick $( git merge-base commit_id_3~ commit_id_3^2 )..commit_id_3^2
git checkout dev
git merge --no-ff -m "Merging changes from commit 3" temp # then we merge into dev
То же самое можно сделать и для commit_1. То есть, предполагая, что эти PR являются прямыми и в их истории нет слияний.
Уточнение: база слияния позволяет узнать, с какой ревизии был запущен PR, который был объединен в commit_id_3 (или что-то еще), так что cherry-pick может переносить только ревизии для разработки любого PR.
Комментарии:
1. Что
temp
здесь? И на какой идентификаторcommit_id_3^2
ссылается? И что..
будет после)
?2. Используйте любой идентификатор фиксации для слияния pr. Например
456785678^2
3. .. должен использоваться именно так , без пробелов между закрытием
)
..
и следующей редакцией, представленной в примере.4. Мой плохой. Позвольте мне исправить это. (Ищите недостающие
$
)5. Ну … это просто для того, чтобы вы могли создать слияние в dev… не стесняйтесь работать над разработчиком напрямую.