【问题标题】:accidently added huge file to my git commit now how to remove just that file from my commit不小心将大文件添加到我的 git 提交现在如何从我的提交中删除该文件
【发布时间】:2018-09-15 16:04:21
【问题描述】:

在我的 Visual Studio 项目中,我有一个来自 Visual Studio 团队服务 的存储库,我正在使用 git 进行版本控制,我对一些文件进行了一些更改,然后我还在我的资产中添加了一个巨大的视频文件,我不小心忘记将文件扩展名添加到我的 gitignore 文件中,我在本地进行了提交,然后我推送了它。

我总共进行了 13 次更改,第 5 次更改被推送(视频文件)耗时太长,我不想在我的 vsts 中推送该视频文件。我试图恢复到该提交但失败了,我只想将这些更改保留在我的文件中并想推送它们但我不想推送视频文件,现在我被卡住了,我应该怎么做才能实现这一点?

【问题讨论】:

  • 你现在重置并忽略你的git repo中的视频文件成功了吗?
  • 我只是复制了更改的文件,然后删除了本地存储库,然后我再次克隆了存储库并用我之前复制的新文件替换了这些更改的文件,然后我做了一个干净的提交并推送一切都在同步:)

标签: git visual-studio azure-devops git-commit git-push


【解决方案1】:

既然你只提交了还没有推送,试试这个

git reset --soft HEAD~1
git rm --cached VideoFile.mp4
git commit ...
git push ....

【讨论】:

  • 文件名不匹配:/
  • 您必须将VideoFile.mp4 更改为文件名及其路径(如果在子目录中)。要查找名称和路径,请运行 git status,您将看到已添加文件的列表,其中包括您要在此处删除的文件。
  • git status 只显示未跟踪的文件,我提交后更改了文件名可能是导致问题的原因。
  • 没关系,我可以再次克隆 repo 并替换更改的文件,然后重新提交。
  • 您是否正确运行了 git reset 命令?尝试运行 git log 并查看该提交是否仍然存在。
【解决方案2】:

Git 不推送更改,也不推送文件。 Git 推送——并获取,就此而言——提交。每个事务的单位是提交的某个整数(嗯,也允许为零;也许说提交的自然数 会更好)。现在,每个提交都是文件的快照,因此文件随提交一起来。但是git push 推送的是提交,而不是文件。 (推送提交后,git push 也会发送一组“更改或创建此分支名称”请求,但我们不必担心。)

那么,您必须做的是替换您的系列提交,改为一系列新的、改进的提交。

对于线性提交序列,从添加的位置删除坏文件的最简单方法是使用交互式变基。不过,还有许多其他方法可以做到这一点,并且有一篇文章在许多答案中详细介绍了所有这些:How to remove/delete a large file from commit history in Git repository? 请参阅Greg Bacon's answer in particular 以使用交互式 rebase 来解决问题。

【讨论】:

    【解决方案3】:

    我通过以下步骤解决了这个问题。

    1. 复制项目的更改文件/文件夹,并将它们从 repo 中粘贴到本地。
    2. 从您的本地系统中彻底删除 repo。
    3. 再次从您系统上的 vsts 克隆 repo。
    4. 现在替换您之前在第一步中复制的文件/文件夹,以便您现在拥有新的文件/文件夹。
    5. 将“.mp4”和“.mkv”等扩展名添加到你的 gitignore。
    6. 提交并推送更改。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-18
      • 2017-09-18
      • 2021-12-22
      • 2011-01-30
      • 2012-09-10
      • 2011-01-29
      • 2012-06-22
      • 2021-12-31
      相关资源
      最近更新 更多