如何停止将已删除的文件推送到远程仓库?

5

我提交了一些文件,试图将它们推送到远程仓库。 然而,在列表中发现了一个大型视频文件,因此停止了推送。 然后我尝试从列表中删除该文件并再次推送。

$git commit -m "comments" -a
$git push origin my_branch
... # I found mp4 file here and terminated push
$git rm --cached path/to/mp4
$git commit -m "comments" -a
$git push origin my_branch 

问题
如何避免已删除的文件被推送到远程仓库?

问题解答
您可以使用以下命令来从git中删除该文件,并且在下一次提交时不会再次将其推送到仓库中:git rm path/to/mp4

备注
如果您已经尝试了以上命令但仍然无法解决问题,请确认您是否正确地进行了提交并且没有手动将文件添加回git中。另外,为了保证git仓库的整洁性,建议不要往仓库中添加大型二进制文件(如mp4等)。


使用git checkout命令检出文件,然后使用git rm命令删除该文件,最后再次推送该文件。这将确保删除该文件。 - Arihant Godha
2个回答

11

从这些命令来看,视频文件似乎仍在提交历史记录中。

假设您没有进行其他提交,请尝试以下操作。如果有,请稍微调整一下。

尝试还原到上一个提交。

git reset --soft HEAD~1

然后执行 git status 命令,查看是否看到该文件

如果看到了,则将其删除并重新提交:

git commit -c ORIG_HEAD

谢谢,我在尝试解决方案之前,可以知道这个解决方案是否会回滚我的更改吗? - user001
重置--soft在提交之前不应该回滚任何内容。它将您返回到提交之前的状态。该提交中的所有更改都将显示在暂存区中。 - Bachmann
如果您不确定,请在另一个文件夹中初始化一个git仓库并进行实验。或者创建一个新的分支,在那里尝试该命令。即使出现问题,reflog也是您的朋友。 - Bachmann

2
如果历史记录不只是一个提交,并且mp4大文件已经在早期提交中进行版本控制,您可以考虑使用以下命令清理存储库的历史记录:

先进行清理,然后执行git gc --aggressive --prune=now命令(如此处所述)。

如果要“回滚”,只需在当前本地仓库的本地克隆上尝试这些操作(即第二个本地仓库,是第一个的克隆)。如果结果不好,可以在第一个(未修改的)仓库中恢复。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接