如何从已推送的提交中删除文件,但不从Git树中删除它。

4

我想在Git提交中删除因错误而添加的文件。

我尝试了这段代码,但惊讶地发现它会永久删除该文件。请问有谁可以帮助我?

请问有谁可以帮助我吗?我所有的测试都失败了。

我是按照这个链接(从Git提交中删除文件)中的说明进行操作的:

git reset --soft HEAD^ 
git reset --soft HEAD~1
git reset HEAD path/to/unwanted_file
git commit -m 'remove unwanted file'

1
看起来你执行了前两行,却没有注意到它们实际上是“备选项”。如果你都做了,那么你就回退了一个提交太多。 - Romain Valeri
1
你无法从现有提交中删除文件。任何现有的提交都不能被修改。你所能做的只是停止使用错误的提交;如果适当的话,您可以创建新的和改进的(已校正的)提交来代替它们。所有这些与“删除”文件没有关系,因为Git不是关于“文件”,而是关于“提交”。您在工作目录中看到和处理的文件根本不在Git中。你遇到的问题是你告诉Git从提交中获取一些工作目录文件,然后... - torek
...然后你现在要说“从那个(不好的)提交切换到这个其他(好/改进的)提交”,当Git这样做时,它将从你的工作树中删除该文件,因为该文件出自于坏的提交,并且不在良好的提交中,因此更新您的工作树的方法是删除该文件。如果你想保留该文件,请将其移到一旁,切换提交,然后将其移回。 - torek
好的,我将尝试第一行,@RomainValeri你知道为什么文件被永久删除了吗? - biwia
1个回答

0
我会这样做。
git checkout revision-where-it-was-added
git rm --cached the-file
git commit --amend --no-edit
git cherry-pick HEAD@{1}..the-branch # replay the other revisions in the branch
# if you like this resulting history:
git branch -f the-branch

@etfshift0 什么是添加修订版本? - biwia
当我尝试运行 git cherry-pick HEAD@{1}..the-branch 时,出现了致命错误:'HEAD@{1}..feat-test01-_35' 是错误的修订版本。 - biwia
错误:合并时以下未跟踪的工作树文件将被覆盖: src/file.py 请在合并之前移动或删除它们。 中止 致命错误:挑选失败 - biwia
git stash save "Will come back in a few minutes"。然后,当你完成整个操作时:git stash pop - eftshift0
谢谢,现在我的文件在Untracked文件中。那我该怎么办? - biwia
显示剩余16条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接