目标提交可能包含父项和后代。
它需要替换旧的提交到位,
所以它不像cherry
命令那么简单。
我的问题将等待完全解决方案。
答案 0 :(得分:4)
不,你做不到。
SHA-1的目的是防止这些变化。整个git体系结构依赖于SHA-1在所有git存储库中唯一标识对象的假设。没办法解决这个问题(不是没有重新设计所有东西,就是这样)。
详细信息在Git Magic book中说明。
答案 1 :(得分:0)
我不熟悉Git,但在Mercurial中,您可以这样做:从存储库中弹出最新的提交并将其保存在“补丁”(hg qimport
)中。结果是repo没有任何最新提交的痕迹加上一个可以给你起始状态的补丁。
所以配方将是从repo中弹出东西,直到修改提交变为HEAD。 Pop也可以修改补丁(或者在没有提交的情况下应用补丁并修改工作区)。
现在您可以提交新版本并应用所有其他补丁。
由于Git和Mercurial非常相似,可能有一个Git命令来实现相同但我不知道它的名字。也许这个答案可以提供帮助:https://serverfault.com/questions/12373/how-do-i-edit-gits-history-to-correct-an-incorrect-email-address-name
答案 2 :(得分:0)
好的,让我们看看这是否有帮助。
警告:
你确定要这么做吗? 如果是,请向下滚动。
这称为graft point。您创建文件.git/info/grafts
并具有以下信息:
<commit-id> <new-parent-of-the-commit>
假设你有这个:
/---D
A---B---C
现在您要将B
替换为D
(不更改提交ID),将其置于移植中:
<commit-id-of-C> <commit-id-of-D>
它保留旧的commitid
,并具有上述限制。