基本上,我只想(重新)设置一个特定提交(commit A
)的父级(比如提交B
),这是某个分支{{1}的根提交。 }。在我通过移植物做出的一个答案中建议here。我稍后会尝试,也许这是更好的方式。
然而,在阅读本文之前,我认为这应该可以通过x
来实现。但是因为父提交rebase
与A
有所不同,我只想保持整个分支B
的方式,只需将父设置为其根提交{{1我想我可能会使用x
策略 - 这似乎不存在。我之前偶然发现了(并认为这是一个错误或我的Git安装)并且总是通过切换分支和使用B
策略来解决这个问题。但是,对于theirs
,在这种情况下我被迫使用ours
策略。
我的命令如下:
rebase
答案 0 :(得分:2)
rebase不是为你想做的而设计的。另一张海报是正确的;你想要做的是设置一个移植来将B附加到A,然后运行git filter-branch
将其烘焙到提交中。可以在git filter-branch
manpage中找到此确切用例的示例。
答案 1 :(得分:0)
我不完全确定我理解你的问题,但如果你的目标是从这个开始:
o C (X)
|
o B
o A
到此:
o C' (X)
|
o B'
|
o A
然后git replace --graft B A
应该做你想做的事。
N.B。 B
和B'
具有相同的文件树,但是不同的提交哈希,因为它们的父提交是不同的。同样地C
和C'
。
为什么必须通过git replace --graft
而不是git rebase -s theirs
完成此操作,我不知道。大概是hysterical raisins。
另请参阅:this answer至How do git grafts and replace differ? (Are grafts now deprecated?)。