恢复 git push

8
我正在尝试将一个大项目推送到远程服务器,使用git push命令。如果连接丢失,有没有办法在上传开始后恢复git push命令,而不必重新开始?
编辑:我正在尝试向GitHub推送
编辑2:所以似乎最好的方法是逐步进行。当我已经在我的计算机上拥有完整的存储库时,有人可以给出一个示例吗?
谢谢

1
我不会感到惊讶,如果这是自动的;虽然你可以直接使用git-send-pack获得更好的结果。 - sehe
是否有类似于https://dev59.com/n2w05IYBdhLWcg3wSABH的方法可以继续中断的git push ssh操作? - Roberto Aloi
谢谢Roberto,但我正在尝试推送到Github,所以我不认为rsync是可行的。 - Daniel Benedykt
如果这是一个经常出现的问题,作为一种hacky的解决方法,你可以尝试逐步推送 - 将你的分支向上移动几个提交,推送,再移动几个提交,推送... - Cascabel
谢谢Jefromi,您能否给出一个例子来解释您的答案?谢谢。 - Daniel Benedykt
增量推送并不一定是最好的选择。是什么导致了失败?如果您有巨大的提交,您可能需要解决这个问题。 - Cascabel
3个回答

9
:推送几个中间提交,这样每次推送的内容就不会太多。当然,如果是一个非常大的提交导致无法推送,这种方法就无效了。
# develop, and end up wanting to push master
git branch master-tmp <commit>
git push origin master-tmp:master
git branch -f master-tmp <a more recent commit>
git push origin master-tmp:master
# ...keep going until you've pushed everything you want

选择要推送的提交有两种主要方法:

  • master~15master~10master~5(分别是 master 前面 15、10 和 5 次提交)

  • 使用 gitk 手动查找;当您在历史记录中选择一个提交时,其 SHA1 自动复制到中键粘贴剪贴板中。


2

增量式的git push

r=remote
b=main # branch
n=$(git rev-list --count $b) # total number of commits
d=1000 # delta. push $d commits per iteration
for i in $(seq $n -$d 0 | tail -n +2)
do
  (set -x; git push $r $b~$i:$b)
done &&
git push $r $b:$b

2
将您的 .git/objects 目录与远程同步,然后执行 git push 命令 - 这样速度会更快。请保留 HTML 标签。

3
我相信我无法在GitHub上完成这个任务。 - Daniel Benedykt
很棒的建议,我会看看能否做到:我正在尝试同步一个巨大的代码库,不确定服务器上能否同时放下两份副本 :P。 - WhyNotHugo

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