git filter-branch
如果不加参数,会做什么?
我不小心在我的存储库上运行了这个命令,结果按下了回车键。
git filter-branch
如果不加参数,会做什么?
我不小心在我的存储库上运行了这个命令,结果按下了回车键。
什么也没有。它似乎计算了哈希值并发现没有变化。
这是用于graft的,如git filter-branch
所述:
将一个提交(通常位于另一个历史记录的顶部)设置为当前初始提交的父级,以便在当前历史记录后面粘贴其他历史记录:
git filter-branch --parent-filter 'sed "s/^\$/-p <graft-id>/"' HEAD
这将在Git 2.6.4或Git 2.7(2015年12月)中更快。
请参见提交348d4f2(2015年11月6日),由Jeff King (peff
)创建。
(由Junio C Hamano -- gitster
--在提交2e5adec中合并,2015年12月4日)
filter-branch
:尽可能跳过索引读写如果用户指定了索引过滤器但没有树过滤器,filter-branch
会巧妙地避免完全检出树。
但我们没有进行下一级的优化:如果您没有索引或树过滤器,我们根本不需要读取索引。
这可以极大地加快仅更改提交对象(例如,将嫁接固定在原处)的情况。
以下是新添加的性能测试数据:
Test HEAD^ HEAD
---------------------------------------------------------------
7000.2: noop filter 13.81(4.95+0.83) 5.43(0.42+0.43) -60.7%
Filter-branch会检查并对由git rev-list
输出的提交进行任何必要的重写,这些提交是由它传递的参数提供的。如果没有要传递的参数,rev-list将使用HEAD,即您当前的checkout。
除了您在命令行上指定的任何修改之外,filter-branch还会将.git/info/grafts
和git replace
中的本地覆盖内容嵌入其中。
因此,要使当前的checkout变为孤立状态,您可以执行以下操作:git rev-parse @ >.git/info/grafts; git filter-branch