从Github主分支中删除文件

8

第一次使用 git,我不小心将所有隐藏文件都添加到了提交中。现在我已经设置好了 .gitignore,并提交了更改,但以"~"结尾的文件仍然存在。

我该如何提交本地文件,并从主分支中移除那些不应再存在的文件?


你的意思是除了正常的git rm和提交之外?你想重写历史,就好像这个提交从未发生过一样? - Kaz
你可以这样做;只需将头重置到提交之前并将其推送到存储库,使其成为头。但是,存储库必须配置为允许非快进式推送。此外,从该存储库拉取的任何人都必须进行硬重置以跟随该更改。由于未引用该提交,因此它变成了垃圾;它会被垃圾收集(在45天左右?)。 - Kaz
2个回答

17

使用git rm --cached FILENAME从仓库中删除文件,但保留物理文件,并使用git add FILENAME将文件添加到您的仓库。您需要使用git commit提交这两个更改。


2
我不知道--cached标志。对此加一分。 :) - user1207456
有没有办法删除所有未跟踪/忽略的文件,这样我就不必手动操作了?Gedit 显然为它打开的每个文件都创建了一个隐藏文件。 - danielsvane
你的文件是否分散在整个目录结构中?如果不是,可以使用一些图形界面工具,如tortoisegit来轻松完成。 - QuantumBlack
Windows搜索列出所有您的“~”文件+TortoiseGit = Win。 - QuantumBlack

0
Here is a DOS batch file that can help:

SET count=1
FOR /F "tokens=*" %%G IN ('dir /s /b *.dll') DO (call :subroutine "%%G")
FOR /F "tokens=*" %%G IN ('dir /s /b *.pdb') DO (call :subroutine "%%G")
FOR /F "tokens=*" %%G IN ('dir /s /b *.txt') DO (call :subroutine "%%G")
FOR /F "tokens=*" %%G IN ('dir /s /b *.cache') DO (call :subroutine "%%G")
FOR /F "tokens=*" %%G IN ('dir /s /b *.force') DO (call :subroutine "%%G")
GOTO :eof

 :subroutine
  git rm --cached %1
  set /a count+=1
  GOTO :eof

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