Как объединить 2 запроса на извлечение из одной ветки в другую в git

#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… не стесняйтесь работать над разработчиком напрямую.