如何从已推送的 git 提交中删除文件

how to remove a file from a git commit that has been pushed

我用错了 git 提交-a 并在提交中添加了比我想要的更多的文件。我想添加另一个修改后的文件作为此提交中包含的单独提交。我如何返回(不丢失对文件的修改)然后再次单独提交它们。

我也已经将其推送到远程源(尽管我知道自从我推送以来没有人拉过任何东西)。

非常感谢!

我会立即将之前的提交推送到远程,运行 git reset HEAD~ 将您的工作区置于您所在的脏状态,然后重新处理您的添加、提交和推送。

警告,这将远程覆盖更改。如果有人取消了当前提交并在其上工作,可能会发生不好的事情。

# Reset last commit, but keep changes staged
$ git reset --soft HEAD^1

# Unstage unwanted file(s) and recommit
$ git reset HEAD path/to/file
$ git commit

# Push the new commit with force to overwrite changes
$ git push origin -f

您可以只在本地删除这些文件并推送新的提交。

如果你以后想排除这些文件,你可以将它添加到 .gitignore 文件

如果你把它推送到一个单独的分支(不是主分支),你可以从远程删除整个分支。

之后,您可以使用

恢复提交
git reset --soft HEAD~1

然后您可以开始提交并再次推送所有内容。