从git commit删除大文件

时间:2019-05-02 02:22:41

标签: git

我在项目源文件中添加了150MB的视频,并且不知不觉地提交了它。然后,我尝试git push提交到远程仓库,并注意到推送挂起了一段时间,然后最终失败了,吐出来了:

Counting objects: 17, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (16/16), done.
Writing objects: 100% (17/17), 145.48 MiB | 138.00 KiB/s, done.
Total 17 (delta 13), reused 0 (delta 0)
remote: Resolving deltas: 100% (13/13), completed with 12 local objects.
remote: error: GH001: Large files detected. You may want to try Git Large File Storage - https://git-lfs.github.com.
remote: error: Trace: 8b4191f1a1055e7dea4412f80b5125d2
remote: error: See http://git.io/iEPt8g for more information.
remote: error: File src/images/greystone_place.mp4 is 145.45 MB; this exceeds GitHub's file size limit of 100.00 MB

我尝试将文件添加到.gitignore,但为时已晚。随后的git push命令产生了相同的结果。

接下来,我尝试将HEAD --soft重置为我最初提交大文件的提交(这是在涉及.gitignore的其他几次提交之后)。从那里,我使用git reset HEAD -- path/to/filename将有问题的文件重置到工作目录并再次提交。这样做,我仍然遇到相同的错误。

我后来意识到也许可以使用--amend命令(基于this article)来解决问题,但这还是行不通的。

在进行软重置时,我还尝试使用git rm --cached path/to/file。这也失败了。

我已经开始阅读有关git rebase igit filter-branch的内容,但它们似乎很复杂,而且我不确定是否会用这种方法来弄错树。

我不是Git专家,但总而言之,我想对其他更改进行git push并排除此大文件。不知何故,它似​​乎与先前的提交交织在一起,使我无法对远程回购进行push

3 个答案:

答案 0 :(得分:0)

您可以通过以下命令轻松完成

git reset --hard origin/<branch_name>

您还可以使用哈希在本地将其删除。

git reset --hard <SHA-Code>

希望有帮助。

答案 1 :(得分:0)

the tutorial on GitHub about removing file from history开始,您可以使用bfg tool或使用git filter-branch,如您在问题中提到的那样:

git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch PATH-TO-YOUR-FILE-WITH-SENSITIVE-DATA' --prune-empty --tag-name-filter cat -- --all

在那之后,由于历史记录已被修改,您可能需要强行按下(git push -f)。

  

我不确定是否会用这种方法使错误的树变茂盛。

您可能首先有一个备份:-)而GitHub可能是另一个备份(因为推送失败)。

答案 2 :(得分:0)

另一种更简单的方法:

  • git在新的单独文件夹中再次克隆GitHub存储库
  • 在此报告您的修改(没有大文件)(您还可以从较早的存储库中挑选未推送的提交)
  • 添加,提交和推送。