这是禁止的。
Git 提交包含其父哈希 ID。如果您作为发送者,向另一个 Git 提供提交H(对于某个哈希 ID H),则其他 Git 不需要接受H,直到它也有H的父级(或父级,如果它是合并提交)。所以你必须提供H的父母。它不需要接受该提交,直到它依次拥有那个(或那些)提交的父级,依此类推。
换句话说,提交的 ID 是它的哈希,但是在存储库中拥有该提交意味着您也拥有它的所有祖先。1 因此,处理此类提交的唯一方法是拥有其所有祖先。
此时,您可以制作该提交的副本(例如,通过)git cherry-pick
以获取具有不同哈希 ID、不同父级以及由于该不同父级而可能导致的任何其他差异的不同提交。2 然后,您可以将此不同的提交(通过其不同的哈希 ID)传递到其他 Git 存储库。如果那个其他 Git 存储库确实有这个新副本的父级,他们不会首先要求任何额外的提交。
1该规则在浅层克隆中有所放松,并且正在进行以其他方式放松它的工作,但至少在原则上仍然是必需的。没有祖先的提交至少是可疑的;可能是假的;链的完整性是通过跟踪链一直回到根来确定的。
2特别是,您可能还需要不同的快照。请记住,Git 提交保存快照——每个文件的完整副本——而不是变更集。H'
因此,如果要将commit的副本H
应用于 commit B
,那么您想要的H'
不是其中的快照H
,而是更改 H
为变更集后的快照,然后将该变更集应用于commit ,同时考虑任何其他的父母和之间的差异。要更改为变更集,我们(或 Git)会将其快照与其父快照进行比较。B
H
B
H
(该git cherry-pick
命令是在提交签出时H'
从H
-and-its-parent进行制作的工具。)B