我有2个类似的回购 A &的乙 我尝试访问的提交是: SHA-1
这非常简单,如果我尝试访问的提交会指定一些REF,但事实并非如此,看起来REF在某种程度上已经丢失了。我只获得了提交的SHA-1。
我现在就这样做的方式是:
回购 A
git remote add repo_b path/to/repo_b.git
git fetch repo_b
git cherry-pick SHA-1
对我来说,无论如何都要避免获取整个存储库引用并且只在该提交中直接执行fetch / cherry-pick?
我也可以访问父母
答案 0 :(得分:0)
要执行cherry-pick操作,您需要提交本身及其父级(以及它们的tree
和blob
对象),以便您可以将提交转换为修补程序。然后,您可以尝试应用修补程序。
要使用正常的Git传输操作获取提交及其父级,但是,您需要一个可以通过其进行提交的引用。 (正如您所说:git fetch
它,可能带有特定的引用名称和/或--depth
来限制您带入自己的存储库的对象数量。)
如果没有,你需要一些替代方法(普通的Git传输除外)。这可能包括某种Web界面,在这种情况下,您需要知道哪些URL调用服务器上的哪些方法。或者,您可以尝试使用git archive
。
虽然git archive
通常是您在本地存储库上运行以捆绑自己的提交,但它有一个--remote
选项,它在服务器上调用git upload-archive
。有关安全性的说明,请参阅该文档,包括是否允许“裸”散列ID。请注意,您仍然需要提交及其父。
如果您可以直接访问服务器,最简单的方法(到目前为止)是使用git format-patch
将提交转换为补丁。取回生成的补丁并使用git am
应用它并从结果中提交,就像git cherry-pick
一样。