【问题标题】:git remove a file that no longer exists on the systemgit 删除系统上不再存在的文件
【发布时间】:2015-08-07 09:40:41
【问题描述】:

我以前从未遇到过这个问题,也不知道这是怎么可能的。我有一个非常大的目录,我错误地下载到了我的 git 存储库中。我无意中做了一个git add .,所以大目录被添加到工作树中,当我尝试提交时,它不允许我提交,因为文件太大了。 然后我没有做git rm,直接从文件系统中删除了文件。下次我尝试提交时,它不允许我提交,并且仍在抱怨目录(现在不再存在于文件系统上)太大。

从文件系统中删除文件是否也将其从 git 工作树中删除?

如果有办法在不丢失更改的情况下撤消我的最后 2 次提交,然后将其重新推送到远程,那就太好了。

【问题讨论】:

    标签: linux git git-commit git-add


    【解决方案1】:

    您需要在提交之前将其从索引中删除:

    git rm --cached FOLDER_NAME
    

    由于您已将其从文件系统中删除,因此该文件夹现在应该已经消失了。

    如果您在最近的提交中添加了该文件夹,那么您可以简单地发出:

    git commit --amend
    git push -f REMOTE BRANCH_NAME
    

    如果您在倒数第二次提交中添加了文件夹,事情会变得有点困难。我建议先创建本地 repo 的备份。

    按照以下步骤操作:

    # Rebase the second most recent commits
    # -i will open an editor
    git rebase -i HEAD~2
    

    在编辑器中将pick 替换为倒数第二次提交的行中的edit 并保存文件。您现在可以更改该提交。问题:

    git rm FOLDER_NAME
    
    # This will open an editor again. You can leave the
    # commit message unchanged. Simply save the file
    git commit --amend
    
    # Finish the rebase action
    git rebase --continue
    

    现在您应该完成了,并且该文件夹已从该提交中删除。您可以使用

    推送
    git push REMOTE BRANCH_NAME
    

    【讨论】:

    • 如何找到缓存的文件列表?我需要知道目录的确切名称。我现在不知道。
    • 你可以使用git ls-files --cached
    • 缓存文件中没有列出。我试图再次推送我的提交,但是当我这样做时,我收到了以下错误:remote: error: File Path_to_dir/dir_name/filename is 200.96 MB; this exceeds GitHub's file size limit of 100.00 MB
    • 是的,我在倒数第二次提交中添加了它。 @hek2mgl
    • @hek2mgl 忘了!谢谢!
    猜你喜欢
    • 2020-05-15
    • 1970-01-01
    • 1970-01-01
    • 2016-07-16
    • 2010-12-22
    • 2020-10-31
    • 1970-01-01
    • 2019-06-26
    • 2020-11-03
    相关资源
    最近更新 更多