Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
git过滤器分支后忘记rm refs/original_Git_Git Filter Branch_Git Gc - Fatal编程技术网

git过滤器分支后忘记rm refs/original

git过滤器分支后忘记rm refs/original,git,git-filter-branch,git-gc,Git,Git Filter Branch,Git Gc,我忘了在git过滤器分支之后rm-refs/original,并且执行了git-gc,这清除了refs。我还承诺参与新回购协议,并希望保留这些承诺 提取的分支大小只有几千字节,但是.git仍然有80MB的重量,就像过滤之前一样 现在refs为空,我无法再轻松删除refs/original。我怎样才能把原件拿走?如果可能的话,我想避免再次过滤分支。您的引用已打包(git gc运行git pack refs)。这对参考文献本身没有任何改变,只是它们都在“打包”的文件中,而不是将每个参考文献放在单独的

我忘了在
git过滤器分支之后
rm-refs/original
,并且执行了
git-gc
,这清除了
refs
。我还承诺参与新回购协议,并希望保留这些承诺

提取的分支大小只有几千字节,但是
.git
仍然有80MB的重量,就像过滤之前一样

现在
refs
为空,我无法再轻松删除
refs/original
。我怎样才能把原件拿走?如果可能的话,我想避免再次过滤分支。

您的引用已打包(
git gc
运行
git pack refs
)。这对参考文献本身没有任何改变,只是它们都在“打包”的文件中,而不是将每个参考文献放在单独的文件中

只需删除
refs/origina/
refs即可。理论上,在每一行上使用
git update ref-d
应该是可行的,但是如果有很多,在编辑器中打开
.git/packed refs
并手动删除所有
refs/original/
行可能会更容易

您可能还需要清除回流

更多信息,请参阅

git-gc
runs
git-pack-refs

如果开始删除引用,请确保使用Git 2.24+(2019年第3季度):“
Git pack refs
”会丢失在运行时创建的引用,这将得到纠正

参见作者(2019年7月31日)
(于2019年8月2日合并)

包引用:获取锁定文件后始终刷新 删除压缩引用时,将重写整个压缩引用文件,以忽略不再存在的引用。
但是,如果另一个
gc
命令正在运行并同时调用
pack refs--all
, 有可能刚更新的ref会丢失新创建的提交

通过这些步骤,可以演示在新更新的引用上丢失提交:

#步骤1:不使用'USE\NSEC'选项编译git
有些内核版本默认启用它,而有些则启用
不如果我们编译git时不使用“USE\u NSEC”,那么会更容易
通过以下步骤演示。
#步骤2:设置存储库并添加第一次提交
git初始回购&&
(cd回购)&&
git config core.logallrefupdates true&&
git提交--允许空-m foo)
#步骤3:在一个端子中,重复重新包装REF
cd回购&&
虽然是真的
做
git包引用--全部
完成
#步骤4:在另一个终端中,同时更新
#使用update ref控制,并创建和删除
#不相关的ref也带有update ref
cd回购&&
虽然是真的
做
us=$(git提交树-m foo-p HEAD^{tree})&&
git更新参考号/负责人/新牧场$us&&
git更新参考文件/头/主文件$us&&
git更新参考-d参考/负责人/纽伯兰&&
它们=$(git版本解析主机)&&
如果测试“$THES”!=“$us”
然后
echo>&2“丢失的提交:$us”
出口1
fi
#赏心悦目
printf。
完成
虽然我们有压缩的refs锁文件和松散的refs锁文件以避免更新冲突,但如果发生
压缩的refs
文件的racy stat有效性,ref将丢失其新提交。
最好的前进路径就是在获取
packed refs
文件的锁文件后总是刷新