例如:
feature C---D---E---G---H---L---M
/ \ \ ^--- tip of feature
master A---B-----------F---I---J---K
^--- tip of master
我想挑选的提交是:C D E G H L M
关键要求:我不想手动指定任何提交 ID --- 我想要一种可靠的方法来根据“我对 feature
做出的 promise ,因为它与 master
不同”来指定它们。我不想要被放入的东西 master
自 feature
背离了它,所以我不想要 F I J K
.原因:我希望能够将这些提交挑选到第三个分支中,但我不能只运行
git merge feature
因为它还包括其他祖先,例如 A
和 B
. (我不想解释为什么 master
中有东西我不想在第三个分支中。)这有意义吗?
最佳答案
您可以通过列出 feature
的第一个 parent 来获取要选择的提交列表。 ,并删除 master
的第一个 parent ;
您可以使用 this answer 中提供的脚本:
git rev-list --first-parent master > listm.txt
git rev-list --first-parent feature > listb.txt
# use grep, use '-f' to read patterns from 'listm.txt',
# use '-v' to say "exclude these patterns"
cat listf.txt | grep -v -f listm.txt
在类似 shell 的 bash 中,您可以使用 <(...)
把它变成一个单衬:git rev-list --first-parent feature | grep -v -f <(git rev-list --first-parent master)
然后,您可以将该列表提供给cherry-pick:list=$(git rev-list ...)
git cherry-pick $list
关于git - 有没有办法运行 `git cherry-pick` 并指定特定于给定分支的一系列提交?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63185942/