git cherry-pick 或从另一个分支 merge 特定目录

标签 git

我在 StackOverflow 上看到过一些不同的帖子,这些帖子稍微解释了 cherry picking,但是他们的代码中的注释对于什么是分支和什么是目录不是很具体。示例 git checkout A -- X Y 告诉我的不多。

基本上我想要这个:

  • master
  • 创建新分支 featureA
  • 将目录 /tools/my-tool 从分支 dev merge 到 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-toolmaster 的提交列表(尚未在 featureA 中),在倒序:

git log --no-merges featureA...master tools/my-tool

换句话说:

git log --no-merges source_branch...dest_branch my/firstpath my/secondpath [...]

为了按时间顺序只获得你需要的提交,你需要先颠倒输入行的顺序(比如使用 tail -rtac),然后隔离提交哈希的列(例如使用 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/

相关文章:

git - 我如何从 visual studio 代码( pull/推)访问 git gist?

git - 在 Synology NAS 上启用 Gitlab LFS

git - 我在 git 中提交并只更改了一个文件并插入了一个文件

git - blueocean 中的子模块?

git - 搜索 git reflog

svn - 为什么 git-svn 随机将我的根目录更改为父目录?

git - 如何撤消/恢复对已添加到 .git/info/exclude 的文件的排除

git - 如何在 Cygwin 中为 git 设置系统默认行以 CRLF 模式结尾?

git - 仅下载更改的文件 git

git - 如何丢弃 git 本地分支更改?