如何从最新提交中删除文件?


当前回答

使用gitGUI可以简化从先前提交中删除文件的过程。

假设这不是一个共享分支,并且您不介意重写历史,那么运行:

git gui citool --amend

您可以取消检查错误提交的文件,然后单击“提交”。

该文件将从提交中删除,但将保留在磁盘上。因此,如果在错误添加文件后取消选中该文件,它将显示在未跟踪文件列表中(如果在错误修改文件后取消检查该文件,则会显示在未提交的更改列表中)。

其他回答

以下内容将显示您想要的文件,这是OP要求的。

git reset HEAD^ /path/to/file

您将看到以下内容。。。

要提交的更改:(使用“git reset HEAD…”取消页面)修改:/path/to/file未提交的更改:(使用“git add…”更新将提交什么)(使用“gitcheckout--…”放弃工作目录中的更改)修改:/path/to/file

“要提交的更改”是提交之前文件的先前版本。如果文件从未存在,这看起来像是删除。如果您提交此更改,则会有一个修订将更改还原为分支中的文件。“未提交的更改”是您提交的更改,以及文件的当前状态

此时,您可以对文件执行任意操作,例如重置为不同的版本。

当您准备好承诺时:

git commit --amend -a

或者(如果您还有其他不想提交的更改)

git commit add /path/to/file
git commit --amend
git rm  -r ./* --cached

这将删除所有缓存/暂存文件

从git 2.23开始,您可以简单地使用以下命令:

git restore --staged <file>

将文件保存在本地(从gitcommit中删除)

如果要保留文件,可以使用--cached,如下所示:

git rm --cached filename

删除本地文件(并从gitcommit中删除)

否则,如果要删除文件,只需使用:

git rm filename

git rm --cached <file_to_remove_from_commit_<commit_id>_which_added_file>
git commit -m "removed unwanted file from git"

将仍然保留本地文件。如果您也不希望文件在本地,可以跳过--cached选项。

如果所有工作都在您的本地分支上,您需要在以后提交时保存该文件,就像拥有一个干净的历史记录一样,我认为一个更简单的方法是:

git rm --cached <file_to_remove_from_commit_<commit_id>_which_added_file>
git commit --squash <commit_id>
git add <file_to_remove_from_commit_<commit_id>_which_added_file>
git commit -m "brand new file!"
git rebase --interactive <commit_id>^

然后,您就可以轻松地完成rebase,而无需记住更复杂的命令、提交消息或键入。