今天在提交代码的时候,先执行 git pull --rebase 遇到了out of memory 错误,如下:
$ git pull --rebaseorigin ultra_lc_dev
Fromssh://*********/branch
* branch branch-> FETCH_HEAD
First, rewinding head toreplay your work on top of it...
fatal: Out of memory,malloc failed (tried to allocate 195924433 bytes)
查了好多资料也没有解决,解决方案里面说的最多的是:
git config --global pack.windowMemory 1024m
但是没有什么用,看来还是要想其它办法。
最终结合之前的经验跟一些小的尝试还是解决了这个问题,下面是解决方案:
1 git stash
执行结果:
把本地的改动缓存起来。确保不会被后面的操作覆盖掉(这一步很关键,否则有可能改了半天的代码需要重新再改一遍了)
2 git pull --rebase
执行结果:
fatal: Out of memory,malloc failed (tried to allocate 195924433 bytes)
3 git checkout 【原来的分支】出错之后,git 会自动切换到一个临时分支。
执行结果:
从临时分支切换回原来的分支。
4 gitk --all
执行结果:
可以看到当前branch上,当前结点之后的所有提交,包括最新的提交,
这个时候,复制主分支上最新的commit id.
5 git reset --hard 【最新的commit id】
执行结果:
本地代码已经同步下来了服务器上的最新代码(this is what we want.)
6 git stash pop
执行结果:
把之前缓存的改动,merge到最新结点上。
到此,就已经解决掉了fatal: Out of memory,malloc failed (tried to allocate 195924433 bytes) 的错误。
总结: 利用了 git reset --hard [commit-id] 的方式,来跳过了 git pull 的时候,挨个把commit merge到本地的操作。
需要注意的是:
保存好修改的文件(Step 1 git stash),因为reset --hard 操作会把本地的所有操作全部覆盖掉。
最后,祝大家工作愉快。