在我的视觉工作室项目中,我有一个来自 visual studio team services 的回购,我使用 git 进行版本控制,我对一些文件进行了一些更改,然后我还为我的资产添加了一个巨大的视频文件,我意外忘记添加该文件扩展名为我的gitignore文件和我在本地提交,然后我推了它 .
我总共进行了13次更改,并且在第5次更改被推送(视频文件)时花了太长时间,而且我不想在我的视频中推送该视频文件 . 我试图恢复到那个提交,但它失败了,我只想保留我的文件中的那些更改并想要推送它们但我不想推送视频文件,现在我卡住了,我该怎么做才能实现这一点?
3 回答
我通过以下步骤解决了这个问题 .
复制项目的更改文件/文件夹,并在本地将其粘贴到repo之外 .
完全删除本地系统的repo .
再次从你的系统上的vsts克隆回购 .
现在替换你在第一步中先前复制的文件/文件夹,以便现在你有了新的文件/文件夹 .
将像".mp4"和".mkv"这样的扩展名添加到你的gitignore .
提交并推送更改 .
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来解决问题 .
由于你只提交但尚未推送,试试这个