Git在rebase过程中崩溃

7

我有相当多的文件存储在代码库中。因此,在合并更改时,git有时会由于内存不足而崩溃。

例如:

git checkout feature
git rebase master
(nasty out of memory exception)
.....

所以一旦我遇到了这个异常,我尝试重新进行基础重定位。

git rebase master

它告诉我分支 feature 是最新的。这似乎很奇怪,因为重新派生时出现了异常。

有没有什么方法可以避免内存溢出异常?或者以某种方式告诉git使用更小的内存量。这个异常会导致库文件损坏吗?如果导致损坏,有没有办法安全地将重新派生期间所做的更改回滚到调用 git rebase master 之前的状态?


异常信息是什么?可能很重要。 - Chris
我现在无法重现它。但是它就像下面这样:blablabla内存不足,blablabla,malloc失败(无法分配100500字节) - michael nesterenko
3个回答


2

你可能在虚拟机上运行此操作,或者存储了一些大文件。如果可以的话,请过滤掉大文件,或增加内存:/

除非我有更多信息,否则我没有其他可以添加的内容。


1
仓库损坏怎么办? - michael nesterenko
“large files”指的是什么?Git需要将存储在仓库中的所有文件存储到RAM中才能重建基础更改吗? - michael nesterenko
不确定。但可能正在尝试。你历史上最大的文件有多大? - Adam Dymitruk
工作副本总共约为2.2 GB。最大的文件约为12 MB。 - michael nesterenko

1

git rebase $BASE 从执行 git reset --hard $BASE 开始。

如果由于内存不足而崩溃,那么你的分支指针将指向$BASE而不是之前所指向的提交。

这就是为什么当你再次执行git rebase master时,会被告知feature已经是最新的,因为在内存不足崩溃后,feature已经指向与master相同的提交。

要将你的分支重置回之前的原始提交,请运行

git reset --hard HEAD@{1}`.

如果在崩溃后对该分支进行了其他工作,请运行git reflog以查找原始提交。

另请参见撤消git rebase


当你将分支恢复到原始提交后,可以尝试

git rebase -m master

如果您有大型二进制文件,Git将尝试使用不同的变基策略,这可能会使用更少的内存。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接