Git 从修改后的提交中删除文件

Git 从修改后的提交中删除文件,git,version-control,Git,Version Control,我将提交推送到了一个repo,在那里我意外地添加了一个文件。没有其他人从远程回购中合并,所以我可以重写历史。但当我从本地提交中删除文件(取消存储,而不是从源代码管理或磁盘中删除)时,我无法推动更改。git push显示所有最新内容尝试: git rm --cached <yourfile> git commit --amend git push -f git-rm——缓存 修改最后一次提交 git-push-f 如果需要重写完整提交,请尝试使用 git reset HEAD^ gi

我将提交推送到了一个repo,在那里我意外地添加了一个文件。没有其他人从远程回购中合并,所以我可以重写历史。但当我从本地提交中删除文件(取消存储,而不是从源代码管理或磁盘中删除)时,我无法推动更改。git push显示所有最新内容

尝试:

git rm --cached <yourfile>
git commit --amend
git push -f
git-rm——缓存
修改最后一次提交
git-push-f

如果需要重写完整提交,请尝试使用

git reset HEAD^
git add <files to be part of the commit>
# or git add -pu
git commit -C <previous commit number>
git复位头^
git添加
#或git add-pu
git提交-C
在执行此操作之前,您需要保留最后一个提交编号,以便能够重用提交消息/日期/作者。

给您:

git checkout HEAD~ -- path/to/your/file
git add path/to/your/file
git commit --amend -C HEAD



虽然我做了一些类似于科林和海德罗诺建议的事情

答案是使用

git push +sa1:sa1

sa1是我的分支。这迫使人们甚至“什么也不推”

我不想从跟踪中删除文件,只想从提交中删除。@sa1 git中没有跟踪的概念,您的文件是否在上次提交中,仅此而已。另一种选择是只保留文件,但不删除任何内容或部分。Git只是一个“文件系统人”制作的“愚蠢的内容跟踪器”。)@KurzedMetal有一个跟踪文件的概念。您在这里所做的是从跟踪文件中删除文件,他想做的是在提交中删除对文件所做的更改。@ColinHebert除非强制推送的问题据说不传递删除,否则这可以用最简单的方式精确地执行原始海报所要求的操作:取消文件的保存并修改提交。然后可以在以后的提交中添加该文件。问题是这些变化并没有被推到远程回购,我也做了类似的事情。问题是我无法将这些更改推送到远程回购。
git reset HEAD~ -- path/to/your/file
git commit --amend -C HEAD
git push +sa1:sa1