首页 > 解决方案 > 如何从另一个 git 存储库中选择提交,并保留或记录原始哈希

问题描述

参考这个线程: Is it possible to cherry-pick a commit from another git repository?

..那里提供了这个答案(这是我需要的):

$ git --git-dir=../<some_other_repo>/.git \
 format-patch -k -1 --stdout <commit SHA> |
 \ git am -3 -k

是否有一种可能的变体可以自动记录(添加到提交消息中?)从我修补的地方到我申请的地方的相关 git 哈希?

手动编辑是可能的,但对于 +100 次提交非常乏味......

标签: gitloggingpatchcherry-pick

解决方案


git fetch <path_to_some_other_repo> <ref_that_has_the_commit>
git cherry-pick <the_commit> -x

-x在原始提交消息中附加一行“(从提交中挑选的樱桃......)”。但它不会记录提交来自哪个存储库。

更新:

您想要选择的提交可以从一个或多个分支或标签访问。分支和标签属于 refs。在大多数情况下,您无法获取随机的单个提交,除非远程存储库允许。为了将提交提交到您当前的存储库中,您需要从其他存储库中获取 refs。假设提交来自分支foo,历史是A-B-C-D-E-F-G并且您想要选择 C、D 和 E。您需要先运行git fetch origin foo,然后再将这些提交选择到当前分支。您可以在 中指定提交git cherry-pick,可以是一个一个,也可以是在一个范围内X..Y或者可能是X...Y

git cherry-pick C D E -x
git cherry-pick B..E -x

的图表foo可能比这个简单的例子更复杂,但你总能找到一种正确的方法来指定它们。


推荐阅读