仅从 git 提交中删除文件

Posted

技术标签:

【中文标题】仅从 git 提交中删除文件【英文标题】:Remove file from git commits only 【发布时间】:2021-12-31 18:41:39 【问题描述】:

我的 git 提交中有一个名为 test.config.php 的文件,我想从我的 git 存储库中删除该文件,所以我使用了

git filter-branch --index-filter "git rm -rf --cached --ignore-unmatch path_to_file" HEAD" HEAD

但它从项目和 git 历史记录中删除了文件,我设法取回了文件,但我只需要从 git 提交中删除文件,而不是从所有项目中删除文件

【问题讨论】:

你想从提交中删除文件而不是项目是什么意思?您可以在其他地方复制该文件,将其从提交中删除,然后将其复制回项目文件夹吗? 提交项目和历史。如果文件在提交中,则它在 Git 和历史记录中。如果不是,那就不是。仅此而已。 我会试一试的,伙计们 【参考方案1】:

您可以使用git reset --soft HEAD^ 这将重置提交,但会将您的更改保留在您的工作和索引树中,这意味着您会发现所有更改都已暂存并准备好提交,还需要注意 HEAD^ 是HEAD^1 的快捷方式,这意味着您将回到当前提交之前的提交状态。

您还可以使用git reset --mixed HEAD^,它将从日志中删除提交,并将您的更改从索引树中删除,这意味着您只会在工作树中找到您的更改,而不是暂存。

【讨论】:

以上是关于仅从 git 提交中删除文件的主要内容,如果未能解决你的问题,请参考以下文章

Git 清除历史已提交文件永久删除文件

git 删除远程仓库中的目录或文件

Git:恢复一个已经在提交中被删除的文件

Git 修改最后一次提交,删除文件,重命名文件

Git 删除添加的带有大文件的提交

如何删除在 git 中错误提交的大文件 [重复]