首页 > 解决方案 > 如何挑选具有所有依赖项的gerrit?

问题描述

假设有一些 gerrits 具有依赖关系:

A <- B <- C

(C取决于B,B取决于A)

如果我只是简单地挑选 C,它将不起作用,因为依赖项(A 和 B)不会被挑选。

我怎样才能轻松地挑选 C,以便在我的本地树中,它的所有依赖项都将在一个命令中自动应用?

标签: gitversion-controlcherry-pick

解决方案


如果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 的 refspec。这是一个 ref 之类的refs/changes/xx/xxxxx/x。如果 C 已提交到分支,则可以改为获取该分支。


推荐阅读