最相似的方法是:
git cherry-pick COMMIT_HASH
但这会创建一个新的提交。因此,当我合并时,我会得到两个具有不同哈希值的相同提交。
答案 0 :(得分:2)
尝试使用 no-commit :
git cherry-pick --no-commit COMMIT_HASH
这应该从该提交中获得更改,但在从暂存区域提交之前就会停止。
答案 1 :(得分:2)
这是不可能的。
提交的ID是提交内容的唯一加密校验和 - 应立即让您问:“ 提交的内容是什么?”
要回答这个问题,请查看示例提交:
$ git cat-file -p HEAD
例如。你会看到这些内容:
tree 80e2d6ce407585c136ab90a6aba1fcb807e7e042
parent 31305025f20182017855793ebce8b122b1396246
author A U Thor <thor@example.com> 1475588570 -0700
committer A U Thor <thor@example.com> 1475588740 -0700
commit message
字面意思(虽然在这种情况下是一些编辑),是提交的完整内容:tree
行,一些parent
行(通常只有一行),{{1行,author
行,空白行和提交消息。
假设您复制了一些其他提交,甚至是使用相同的committer
(tree
是一个唯一的Git对象的ID,表示Git对您的工作树 1的快照功能)。假设你以某种方式欺骗Git使用相同的时间戳,即使它可能是几天,几小时,甚至现在只是几秒钟,而不是你进行其他提交时。假设您还准确地复制了提交消息。但是,如果您使用不同的当前提交在不同的分支上,则新副本的tree
行将会有所不同。
parent
行告诉Git在任何给定提交之前立即提交哪些提交。因此,每个 new 提交使分支名称指向新提交,而新提交指向上一次提交。提交的唯一ID不仅取决于源快照,作者和提交者名称/电子邮件/时间戳以及提交消息。它也依赖于之前的提交ID,而后者又取决于它自己以前的提交ID,以及历史上的所有方式。
换句话说,唯一提交ID不仅仅标识一个特定提交,还指定整个历史记录:每个的ID >提交导致该特定提交。
1 更准确地说,parent
是由index / staging-area的内容构成的。这就是您需要对暂存区域进行tree
更改的原因:如果不这样做,修改后的文件将不会出现在下一次提交中。