意外地将巨大的文件添加到我的git提交中,现在如何从我的提交中删除该文件

时间:2018-04-05 18:22:31

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

在我的visual studio项目中,我有来自 visual studio团队服务的回购,我使用 git 进行版本控制,我对一些文件进行了一些更改然后我还在我的资产中添加了一个巨大的视频文件,我意外忘记将该文件扩展名添加到我的gitignore文件中,然后我在本地提交了一个提交,然后我推了它。

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

3 个答案:

答案 0 :(得分:3)

Git没有推送更改,也没有推送文件。 Git推送和提取,就此而言 - 提交。每个事务的单位是一些完整的提交(嗯,也允许为零;也许最好说自然数的提交)。现在,每个提交都是文件的快照,因此文件随着提交而出现。但是git push推送的是提交,而不是文件。 (推送提交后,git push还会发送一组"更改或创建此分支名称"请求,但我们不必在此担心。 )

然后,您必须执行的操作是替换 错误的系列提交,而是使用一系列新的改进提交。

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

答案 1 :(得分:2)

由于您只提交但尚未推送,请尝试此

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

答案 2 :(得分:0)

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

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