gpt4 book ai didi

Git 正在推送我已删除的文件

转载 作者:行者123 更新时间:2023-12-02 17:25:30 24 4
gpt4 key购买 nike

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

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

最佳答案

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

It's now 8 commits later...

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

###怎么做

  1. 确保工作树是干净的。提交或 stash 您在工作树中所做的任何更改。此外,如果自有问题的提交以来项目的历史是线性的,则以下内容有效;没有分支或 merge 。分支或 merge 提交不会阻止修复存储库,但过程并不是那么简单。接下来的步骤假设历史是线性的。

  2. 运行 git log --pretty=oneline 并确定添加大文件的提交。事实上,您需要找到此提交的父级。您可以计算在其父项之后创建了多少次提交,也可以简单地从 git log 的输出中复制其散列。假设您在错误的一次之后做了 8 次提交;错误提交的父项是 HEAD~9

  3. 运行 git rebase --interactive HEAD~9(或输入提交的哈希值而不是 HEAD~9)。

  4. 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 .........
  5. 验证文件是否以引入大文件的提交开头(或至少包含)。如果没有,则从文件中删除所有内容,保存并退出编辑器。 Git 将看到该文件为空并将中止操作。仔细检查 git log 的输出,然后重新开始。

  6. 如果文件以添加大文件(或将其包含在另一行)的提交开头,则编辑其后的行。将行首的单词 pick 替换为 fixup(下一行,包含您删除文件的提交的行)。不要更改任何其他内容!

  7. 保存文件,关闭编辑器,等待Git完成命令。

如果一切顺利,在 Git 成功完成后,git log 会显示您删除文件的提交消失了。此外,如果您检查错误提交引入的修改,您会看到大文件也消失了。现在可以推送到 GitHub。

如果 rebase 失败(不应该),则运行 git rebase --abort 并且 Git 会将您的存储库恢复到开始之前的状态。您可以重试或搜索不同的解决方案。

关于Git 正在推送我已删除的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38982159/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com