git - 有没有办法运行 `git cherry-pick` 并指定特定于给定分支的一系列提交?

标签 git

例如:

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 不同”来指定它们。我不想要被放入的东西 masterfeature背离了它,所以我不想要 F I J K .
原因:我希望能够将这些提交挑选到第三个分支中,但我不能只运行 git merge feature因为它还包括其他祖先,例如 AB . (我不想解释为什么 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/

相关文章:

git - 我如何在 SourceTree 中查看已提交但待推送的更改

c# - PowerShell 脚本上的 Git 命令 - 授权

git - 将现有仓库推送到新的 Github 仓库时忽略某些文件

c++ - Git Diff Indent/Pretty Print/Beautify Before Diff

git - 如何完全清除git存储库而不删除它

git - 解决 IDE 中的 merge 冲突,同时保留 3 向 merge 信息

git - merge 两个分支和 Git 历史

git - 提交前显示 git 的压缩提交大小

git - 是否可以从 Bitbucket pull 请求创建 Heroku 评论应用程序

Github:还原后忽略更改(git cherrypick、git rebase)