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


当前回答

https://stackoverflow.com/a/2047477/14508423https://stackoverflow.com/a/19666677/14508423非常相似,两者都尝试了。没有什么Git一直在跟踪文件。(我使用vscode,因此文件立即标记为U(未跟踪)或A(已添加))

这样做https://stackoverflow.com/a/53431148/14508423整个类别解决了这个问题。

这样做可以从git中删除文件,并让git忘记它:

**manually add the file name to .gitignore**

git rm --cached settings.py    
git commit -m "remove settings.py"
git push origin master
git rm -r --cached .
git add .
git commit -m "Untrack files in .gitignore"

ps:每次失败时,我都试图删除包含敏感信息的文件,如令牌(.env和settings.py文件)。但它可以处理随机文件

其他回答

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

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

使用Git

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

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

git filter-repo --path file.ext

这是我唯一的选择。

git filter-branch -f --index-filter 'git rm --cached --ignore-unmatch *.sql'

注意:用文件名或文件类型替换*.sql。要非常小心,因为这会经过每次提交并删除此文件类型。

编辑:注意-在这个命令之后,您将无法推或拉-您将看到拒绝“不相关的历史记录”,您可以使用“git push--force-u origin master”来推或拉

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中的此文件。

约翰·肖平编辑的格雷格·休吉尔(Greg Hewgill)的回答对我很有帮助,因为我并不在乎将文件从历史中完全删除。在我的情况下,它是一个目录,所以我做的唯一更改是使用:

git rm -r --cached myDirectoryName

而不是“git rm--cached file1.txt”..后接:

git commit -m "deleted myDirectoryName from git"
git push origin branch_name

谢谢Greg Hewgill和Johannchopin!

更一般地,git help至少可以帮助解决以下简单问题:

zhasper@berens:/media/Kindle/documents$ git help
usage: git [--version] [--exec-path[=GIT_EXEC_PATH]] [--html-path] [-p|--paginate|--no-pager] [--bare] [--git-dir=GIT_DIR] [--work-tree=GIT_WORK_TREE] [--help] COMMAND [ARGS]

The most commonly used git commands are:
   add        Add file contents to the index
   :
   rm         Remove files from the working tree and from the index