不小心将大文件添加到我的 git 提交现在如何从我的提交中删除该文件

accidently added huge file to my git commit now how to remove just that file from my commit

在我的 visual studio 项目中,我有一个来自 visual studio team services 的 repo,我正在使用 git 为了我的版本控制,我对一些文件做了一些更改,然后我还在我的资产中添加了一个巨大的视频文件,我不小心忘记将该文件扩展名添加到我的 gitignore 文件中,我做了一个在本地提交然后我推送它。

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

由于您只是提交但尚未发布,试试这个

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

Git 不会推送 changes,也不会推送 files。 Git 推送——就此而言——获取——提交。每个事务的单位是一些整数的提交(好吧,零也是允许的;也许说 自然数 的提交会更好)。现在,每个提交都是 文件 的快照,因此文件 随提交而来 。但是 git push 推送的是 提交 ,而不是文件。 (推送提交后,git push 也发送了一组 "change or create this branch name" 请求,但我们在这里不必担心。)

然后,您必须做的是替换您的系列提交,而不是一系列新的、改进的提交。

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

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

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