【问题标题】:Cleaning up git history清理 git 历史
【发布时间】:2013-02-26 01:27:19
【问题描述】:

在我的一个项目(签入 git 存储库)中,我添加了一个巨大的目录(15000 个文件,3GB)。当我意识到这是错误的,我删除了它,但它似乎还在历史中。

让它仍然存在会使项目克隆成为一项很长的任务。克隆项目后,.git 目录大约 4GB,但实际项目大小仅为 15MB。

我的问题是:如何调整历史记录,例如确保删除 3GB 目录?或者有没有其他方法可以减少整个项目的下载大小并加快克隆过程?

【问题讨论】:

  • 澄清一下:3GB 已经在存储库中有一段时间了,对吗?如果不是最近的提交,或者其他人已经撤消了在大提交之后做出的提交,则处理方式会有所不同。
  • 目录在那里大约一个月。一个月前我把它删了。可能有几个文件已更改。该项目只有 2 名开发人员。

标签: git github


【解决方案1】:

所以你知道是哪个提交引入了巨大的目录。假设这是在修订版AAAAAAA 中完成的。

要摆脱提交,删除目录(使用提交BBBBBBB)并再次签入是不够的:提交AAAAAAA 仍然存在,这会增加您的存储库大小。

要摆脱提交,我们需要git rebase。打开你的 git 控制台并输入

git rebase -i AAAAAAA~1

这将打开一个编辑器,其中提交 AAAAAAA 位于第一行。删除这一行(即当 Vim 是您的编辑器时,点击 dd)和您再次删除目录的提交 (BBBBBBB),保存文件并退出 ( :wqa)。

此后,变基开始,完成后,AAAAAAABBBBBBB 不再存在。真的。

您现在还可以使用git gc 触发一些内务处理,并在它运行时取一杯咖啡。


另请参阅此答案:git push heroku - stop heroku pushing/uploading massive file

【讨论】:

  • 感谢您的回答。这对我来说似乎是一个不错的计划,但实际上我更喜欢创建一个新的存储库,在那里复制代码并从头开始。这对我来说更容易,至少我完全理解了这个过程:)
  • -i~1 是什么意思?
  • @qed: -i 表示交互式(参见 rebase 文档),~1 表示 1 次修订(kernel.org/pub/software/scm/git/docs/gitrevisions.html
【解决方案2】:

尝试遵循本指南:http://book.git-scm.com/4_undoing_in_git_-_reset,_checkout_and_revert.html

基本上可以做

git reset --hard HEAD~1

git reset --hard [prev_commit]

【讨论】:

    猜你喜欢
    • 2017-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-21
    • 1970-01-01
    • 2017-01-29
    • 2013-06-21
    • 1970-01-01
    相关资源
    最近更新 更多