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


当前回答

这是我从比特桶回购中删除文件的工作,我最初将文件推送到分支。

git checkout origin/develop <path-to-file>
git add <path-to-file>
git commit -m "Message"
git push

其他回答

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

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

git gui citool --amend

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

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

现在,苹果已经将所有MacOS用户更新为zsh,正确的答案不再有效。

git reset --soft HEAD^
zsh: no matches found: HEAD^

您可以通过单引号防止shell将^视为特殊字符。

git reset --soft 'HEAD^'

或者,您可以在shell中禁用此行为。通过更新~/.zshrc

unsetopt nomatch

事实上,我认为一种更快更简单的方法是使用git rebase交互模式。

git rebase -i head~1  

(或头~4,你想走多远)

然后,使用“edit”代替“pick”。我没有意识到“编辑”有多强大。

https://www.youtube.com/watch?v=2dQosJaLN18

希望你会发现它有帮助。

正如接受的答案所示,您可以通过重置整个提交来实现这一点。但这是一种相当严厉的做法。要做到这一点,一个更干净的方法是保留提交,只需从中删除更改的文件。

git reset HEAD^ -- path/to/file
git commit --amend --no-edit

git reset会将文件恢复为上次提交时的状态,并将其存储在索引中。工作目录中的文件未被触动。然后,gitcommit将提交并将索引压缩到当前提交中。

这基本上会获取上一次提交中的文件版本,并将其添加到当前提交中。这不会导致任何净更改,因此文件有效地从提交中删除。

Here is the step to remove files from Git Commit.

>git reset --soft HEAD^1(either commitid ) -- now files moved to the staging area.
>git rm --cached filename(it will removed the file from staging area)
>git commit -m 'meaningfull message'(Now commit the required files)