如何从存储库中删除“file1.txt”?


当前回答

删除特定文件

git-rm文件名

在一次快照中递归清理目录中所有未跟踪的文件

git-clean-fdx

其他回答

使用git rm。

如果要从Git存储库和文件系统中删除文件,请使用:

git rm file1.txt
git commit -m "remove file1.txt"

但如果您只想从Git存储库中删除文件,而不想从文件系统中删除,请使用:

git rm --cached file1.txt
git commit -m "remove file1.txt"

并将更改推送到远程回购

git push origin branch_name

如果您的文件是敏感的(例如,您意外添加并提交的设置或密钥),那么您可以从所有版本中删除它。

要从所有版本中删除,请使用以下命令(警告:小心,因为如果没有副本,您将无法还原回购中删除的文件):

使用Git

git filter-branch --index-filter 'git rm -rf --cached --ignore-unmatch file.ext' HEAD

使用gitfilter repo(在这里获取,git推荐的新方法)

git filter-repo --path file.ext

gitrm从现在起只会删除该分支上的文件,但它将保留在历史中,git将记住它。

正确的方法是使用gitfilter分支,正如其他人在这里提到的那样。它将重写分支历史记录中的每个提交以删除该文件。

但是,即使在这样做之后,git也能记住它,因为在reflog、remotes、标记等中可以引用它。

如果您想在一个步骤中完全消除它,我建议您使用git forget blob

https://ownyourbits.com/2017/01/18/completely-remove-a-file-from-a-git-repository-with-git-forget-blob/

这很简单,只需git忘记blob file1.text即可。

这将删除每个引用,执行gitfilter分支,最后运行git垃圾收集器gitgc,以彻底清除repo中的此文件。

我尝试了许多建议的选项,但似乎都不起作用(我不会列出各种问题)。我最终所做的(对我来说)简单而直观的工作是:

将整个本地回购转移到其他地方再次将回购从主机克隆到本地驱动器将文件/文件夹从#1中的原始副本复制回#2中的新克隆确保问题大文件不存在或排除在.gitignore文件中执行通常的gitadd/gitcommit/gitpush

我有obj和bin文件,它们意外地进入了repo,我不想污染我的“已更改文件”列表

当我注意到他们去了遥控器后,我将其添加到.gitignore中,忽略了他们

/*/obj
/*/bin

问题是它们已经在远程,当它们被更改时,它们会弹出为已更改,并污染已更改的文件列表。

要停止查看它们,您需要从远程存储库中删除整个文件夹。

在命令提示中:

CD到repo文件夹(即C:\repo\MyRepo)我要删除SSIS\obj。似乎只能在顶层删除,因此现在需要将CD插入SSIS:(即C:\repo\MyRepo\SSSIS)现在输入魔法咒语git rm-r-f objrm=删除-r=递归删除-f=表示力,因为你真的是这么想的obj是文件夹现在运行gitcommit-m“删除obj文件夹”

我收到一条警告消息,说13个文件更改了315222个删除

然后,因为我不想查找CMD行,我进入Visual Sstudio并执行了同步,将其应用到远程