我在 StackOverflow 上看到过一些不同的帖子,这些帖子稍微解释了 cherry picking,但是他们的代码中的注释对于什么是分支和什么是目录不是很具体。示例 git checkout A -- X Y
告诉我的不多。
基本上我想要这个:
- 从
master
创建新分支 - 将目录
/tools/my-tool
从分支dev
merge 到featureA
featureA
最佳答案
要回答有关如何挑选某些目录(作为提交而不是暴力检查)的原始问题,这是可能的。想象一下,featureA
已经从 master
中分离出来,而您想引入 tools/my-tool
提交。
Assuming that you never made any commits that contain both stuff from
/tools/my-tool
and stuff from other directories
这将为您提供 tools/my-tool
中 master
的提交列表(尚未在 featureA
中),在倒序:
git log --no-merges featureA...master tools/my-tool
换句话说:
git log --no-merges source_branch...dest_branch my/firstpath my/secondpath [...]
为了按时间顺序只获得你需要的提交,你需要先颠倒输入行的顺序(比如使用 tail -r
或 tac
),然后隔离提交哈希的列(例如使用 cut
):
git log --format=oneline --no-merges featureA...master tools/my-tool \
| tail -r \
| cut -d " " -f 1
要一次完成整个操作,请执行以下操作:
git cherry-pick $(git log --format=oneline --no-merges featureA...master tools/my-tool | tail -r | cut -d " " -f 1)
关于git cherry-pick 或从另一个分支 merge 特定目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19821749/