2016-11-30 65 views
1

不知怎的,我有一个非常大的本地存储库,因为我偶然添加了超过2 GB的文件,并且没有想过试图推动这个。我中止,删除的文件,做了再犯,但是当我尝试git push origin master到到位桶,它失败:Git - 如何重置“推”

fatal: The remote end hung up unexpectedly 

我的git的文件仍然是巨大的,即使我已经很久以来删除不需要的文件。由于推送超过2 GB,Bitbucket说我需要将http.postBuffer设置为更高的数字。我已经做了这么多次,但是经过大约15次尝试之后,我想重新开始。

git status给了我这样的:

On branch master 
Your branch is ahead of 'origin/master' by 4 commits. 
    (use "git push" to publish your local commits) 

但由于推从来没有工作,我该如何解决?最坏的情况下,我可以爆炸回购和重建它,但我想知道是否有一种方法来重置推,因为它保持失败。

+1

你是如何“删除不需要的文件”底垫?这是一个版本控制系统,它也保留较旧版本(包括已删除的文件)。您需要重写历史记录以完全擦除任何记录(然后可能会进行垃圾回收)。 – Thilo

+1

[如何从Git存储库中的提交历史中删除/删除大文件?](http://stackoverflow.com/questions/2100907/how-to-remove-delete-a-large-file-from- commit-history-in-git-repository) – Thilo

+0

这个问题在这里经常会出现,但你可以使用'git filter-branch'或'git rebase -i'来移除那些错误的提交。立即这样做,所以他们不会被进一步埋葬。 –

回答

2

的提交做到这一点你可以提交-ID weigreen’s answer将有助于有问题的提交是最近的一次,在其他情况下,您需要rewrite the history。我更喜欢交互式底线

git rebase -i <some-commit-before-the-problematic-one> 

它将与默认的动作一起显示提交的名单pick它们,因为它们。如果您想保留有问题的提交的一部分,请在该行上将pick更改为edit。如果您想要删除它,只需删除该行即可。如果您选择编辑该提交,Git会将工作树置于状态,就像刚刚完成有问题的提交一样。改变你需要什么,修改承诺:

git commit --amend 

之后,让Git的使用完

git rebase --continue 
+0

这会效果最好。我最终做了一个硬重置,然后强行推。如果我尚未完成硬重置,您的解决方案会更好。:( – Tensigh

+0

@Tensigh在运行'git gc'之前,仍然可以使用'git reflog'来访问已删除的参考文件 – Melebius

+0

好的,谢谢。现在我明白了,我该如何回滚? – Tensigh

1

您可以通过git reset

git reset --hard <commit-id> 

使用git log

你将失去​​头之间所有的工作,你选择

+1

我认为互动式底线会更有意义。使用rebase可以保留以后的工作。 rebase和你的答案都会重写分支的历史,所以从这个角度来看,这两种方法都不会更好。 –

+0

这不会对任何其他可能包含巨大文件的分支或标签执行任何操作。 – Thilo