我认为这里的其他答案是错误的,因为这是一个将错误提交的文件从前一次提交移回到暂存区域的问题,而不取消对它们所做的更改。这可以像 Paritosh Singh 建议的那样完成:
git reset --soft HEAD^
要么
git reset --soft HEAD~1
然后重置不需要的文件,以便将它们从提交中删除:
git reset HEAD path/to/unwanted_file
现在再次提交,您甚至可以重用相同的提交消息:
git commit -c ORIG_HEAD
注意 !如果您只想从之前的提交中删除文件,并将其保存在磁盘上 ,请阅读上面的 juzzlin 的答案 。
如果这是您的上次提交,并且您希望从本地和远程存储库中完全删除该文件 ,则可以:
git rm <file>
git commit --amend
修正标志告诉 git 再次提交,但是 “合并”(不是在合并两个分支的意义上)这个提交与最后一次提交。
正如评论中所述,在这里使用git rm
就像使用rm
命令本身一样!
现有的答案都在讨论从上次提交中删除不需要的文件。
如果要从旧提交中删除不需要的文件(甚至推送),并且不希望创建新的提交,这是不必要的,因为操作:
1。
找到您希望文件符合的提交。
git checkout <commit_id> <path_to_file>
如果要删除多个文件,可以多次执行此操作。
2。
git commit -am "remove unwanted files"
3。
找到错误添加文件的提交的 commit_id,让我们在这里说 “35c23c2”
git rebase 35c23c2~1 -i // notice: "~1" is necessary
此命令根据您的设置打开编辑器。默认的是 vim。
将最后一次提交(应该是 “删除不需要的文件”)移动到错误提交的下一行(在我们的例子中为 “35c23c2”),并将命令设置为fixup
:
pick 35c23c2 the first commit
fixup 0d78b28 remove unwanted files
保存文件后你应该很好。
完成 :
git push -f
如果您不幸遇到冲突,则必须手动解决。