Git正在推送一个I';我删除了

Git正在推送一个I';我删除了,git,github,Git,Github,假设我有一个回购协议,在commit X的回购协议中,我试图上传一个超过github上传限制的视频。因此,考虑到这一点,我在删除那个大文件后立即进行了提交。现在是8次提交之后,我尝试推送我的更改,但每次我这样做,git都试图压缩和推送这段视频,它已经100%不在我的文件结构中,并且已经提交出去了 为什么会这样?有没有一种方法可以让我挑选一个提交并将其从我的git历史记录中删除,这样当我推送时,它就不会被纳入推送,我就可以克服这个问题?即使大文件不再在您的工作树中,它仍然在存储库中,因为有一个包含

假设我有一个回购协议,在commit X的回购协议中,我试图上传一个超过github上传限制的视频。因此,考虑到这一点,我在删除那个大文件后立即进行了提交。现在是8次提交之后,我尝试推送我的更改,但每次我这样做,git都试图压缩和推送这段视频,它已经100%不在我的文件结构中,并且已经提交出去了


为什么会这样?有没有一种方法可以让我挑选一个提交并将其从我的git历史记录中删除,这样当我推送时,它就不会被纳入推送,我就可以克服这个问题?

即使大文件不再在您的工作树中,它仍然在存储库中,因为有一个包含它的可访问提交

现在是8点以后

假设您在提交
A
(过去的第8次提交)时添加了大文件,并在提交
A+1
(过去的第7次提交)时将其删除,则需要修改回购历史记录,编辑提交
A
,然后从中删除大文件。如果在提交
A+1
时所做的唯一更改是删除了大文件,则可以将提交
A+1
压缩为提交
A
,这应该可以解决问题

怎么做
  • 确保工作树是干净的。提交或隐藏工作树中的任何更改。此外,如果项目的历史记录(因为有问题的提交)是线性的,那么下面的代码也可以工作;没有分支或合并。分支或合并提交不会阻止修复存储库,但过程并不是那么简单。接下来的步骤假设历史是线性的
  • 运行git log--pretty=online,并确定添加大文件的提交位置。事实上,您需要找到此提交的父级。您可以计算在其父级之后创建的提交数量,也可以简单地从
    git log
    的输出中复制其哈希值。假设您在错误的一次提交之后进行了8次提交;错误提交的父项是
    HEAD~9
  • 运行
    git-rebase--interactivehead~9
    (或者将提交的哈希值替换为
    HEAD~9
  • Git
    打开默认编辑器,其中包含如下文件:

    pick 1be0057 the commit that adds a big file
    pick 766b3e2 removed the big file
    pick a1adf78 another commit comment
    ......... all the other commits until HEAD ...........
    
    # Rebase aa99b12..aff6d45 onto aa99b12 (9 command(s))
    #
    # Commands:
    # p, pick = use commit
    # r, reword = use commit, but edit the commit message
    # e, edit = use commit, but stop for amending
    # s, squash = use commit, but meld into previous commit
    ......... more lines of explanation here .........
    
  • 验证文件是否以(或至少包含)引入大文件的提交开始。如果没有,则从文件中删除所有内容,保存并退出编辑器
    Git
    将看到文件为空,并将中止操作。仔细检查git日志的输出,然后重新开始

  • 如果文件以添加大文件(或在另一行中包含它)的提交开始,则编辑它后面的行。用
    fixup
    替换行(下一行,包含删除文件的提交)开头的单词
    edit
    。不要改变任何其他东西
  • 保存文件,关闭编辑器,等待
    Git
    完成命令
  • 如果一切顺利,
    Git
    成功完成后,
    Git log
    会显示删除文件的提交已消失。此外,如果您检查错误提交引入的修改,您将看到大文件也消失了。现在可以推送到GitHub了


    如果rebase失败(不应该),则运行
    git-rebase--abort
    git
    将存储库恢复到启动前的状态。您可以重试或搜索其他解决方案。

    您是否添加了git此删除操作?您可以尝试
    git rm--cached
    并再次提交是的--在我撞到墙后,我执行了git添加/提交操作以删除文件并将其记录在git历史记录中。我可以看到我特别说的“添加的视频”的提交和之后说的“删除的愚蠢的视频”的立即提交。我也只是尝试了
    git rm--cached
    ,但它找不到文件。很好的答案,修复了问题。谢谢