Если все из A, B и C были отправлены, вы можете рассмотреть git merge
:
git merge C --no-ff
# merge commit does not invoke the hook commit-msg, so
# if your Gerrit requires Change-Id and you want to push
# the merged commits for review, use amend-commit to generate it
git commit --amend
Если хотя бы один из них не был представлен, используйте git cherry-pick
вместо:
git cherry-pick HEAD..C --no-merges
HEAD..C
эквивалентно всем коммитам, достижимым с C и новым для текущей ветви. --no-merges
исключает коммиты слияния между ними. В идеальном случае коммиты слияния не связаны с конфликтами, и вам не нужно их выбирать. Если вы действительно хотите выбрать коммит слияния, это немного раздражает, так как вы должны указать, какой родитель будет основным.
Если C и его предки еще не доступны в локальной сети, вы сначала нужно получить их:
git fetch origin <refspec_of_C>
Вы можете найти ссылку c из C на странице C. Это ссылка вроде refs/changes/xx/xxxxx/x
. Если C было отправлено на ветку, вы можете вместо этого получить ветку.