git-filter-branch上,它被称为:
要将提交(通常位于另一个历史记录的顶端)设置为当前初始提交的父级,以便将另一个历史记录粘贴到当前历史记录的后面:

git filter-branch --parent-filter 'sed "s/^\$/-p <graft-id>/"' HEAD

(如果父字符串为空-这在我们处理初始提交时发生-将graftcommit添加为父字符串)。
这正是我想要的,即设置一些根提交(A)的父级(提交B)。有关相关问题,请参见here
但那个命令里的移植物身份证到底是什么?那是新父母吗,即A
此外,还提供了一个更简单的例子来实现同样的目的:
或者更简单:
echo "$commit-id $graft-id" >> .git/info/grafts
git filter-branch $graft-id..HEAD

同样,在这个例子中$graft-id应该是什么?以及$commit-id=A,对吗?或者是$commit-id=B$graft-id=A
我也读过,但我还是不明白为什么我需要这样的概念。为什么我不能就这么做?
好吧,我想我已经想好了,看看我自己的答案。
为了解释我为什么需要它:
在我们的项目this中,我们一度包含了google breakpad。
我们并没有从官方的SVN(因为当时它对我不起作用)而是从最新的LastFM Stable(它只是随机的,从那里——我也有它在我的磁盘上,知道LastFM的人可能采取了一些稳定的BreakPad版本)。
然后,随着时间的推移,我们对自己的google breakpad应用了几个补丁。
现在,几个月后,我们想整理一下历史记录,对breakpad的所有补丁都有一个很好的概述,也许还会把它们放到上游。最重要的是(对我们来说),我们想更新我们的breakpad副本。
所以,我认为最好的做法是创建一个新的git存储库,从某个地方获取正式的源代码历史记录,并通过git filter-branch A..HEAD从我们的主存储库获取所有特定于breakpad的内容。我用OpenLieroX作为基础。git filter-branch也有点复杂,因为我们曾经在openlierox存储库中移动了整个breakpad目录。
所以我最终得到了三个分支:
filter-branchbreakpad-in-mainsrc-在breakpad处于git filter-branch状态时首次运行。
src/breakpad/externalbreakpad-in-libs-在breakpad处于git filter-branch时的第二次运行。
libs/breakpad:从this Breakpad mirror复制official
然后我在master中搜索commit,它最接近official中的根。我没有任何完美的匹配,所以我使用了最接近的一个(编写了一个小的python脚本来解决这个问题)。这个现在被标记为breakpad-in-mainsrc
然后我想把这三段历史融合在一起。按照上面描述的方式进行(下面给出了我自己的答案)。
结果如下:Breakpad mirror

最佳答案

这是一个相当模糊的特征。
如果你需要这样做,你最好确保你清楚地知道git在幕后是如何工作的,你知道你想要实现什么。
此外,还有一个更新的、可能更有用的(至少是更灵活的)特征称为git replaceman page)。
如果你真的需要的话,同样的文档包含了大量的信息。
但你看
https://git.wiki.kernel.org/index.php/GraftPoint
What are .git/info/grafts for?
http://bugsquash.blogspot.com/2010/03/stitching-git-histories.html

10-04 12:44