如何在git commit中删除损坏的文件

时间:2013-03-24 21:37:46

标签: git revert

我不小心将文件提交给了我的git repo,这个文件已经损坏了。 当我在笔记本电脑上工作并且电池电量耗尽时,就发生了腐败。我没有立刻意识到这最终只出现在一个由奇怪的符号组成的文件中。但是,我把它交给了我的回购。

现在我设法使用git revert HEAD^恢复到以前的非破坏版本,并且我有一个未损坏的文件版本。到目前为止一切都很好。

但是,日志显示已损坏的文件仍在我的仓库树中。 我现在的问题是:这有问题吗,还是我可以忘掉它?有没有办法从repo中删除那个损坏的提交/文件?

4 个答案:

答案 0 :(得分:1)

要回滚到先前的提交,请使用

git reset --hard <commit>

假设您当前在某个分支上,这会将分支头设置为指定的提交,并将您的工作树签出到该提交。这个销毁任何未提交的更改!

如果您以后要撤消该操作,可以使用git reflog查找以前的提交ID。

答案 1 :(得分:1)

如果您没有推送更改,git revert可能不是您想要的。它会进行一次新的提交,以反转所做的更改。

使用git reset --hard <last good commit>删除错误提交。您可以使用HEAD引用来解决此提交,但这不会调整分支中的提交。如果您引用带有分支名称的最后一次已知良好提交,例如git reset --hard <branch>~2,则在当前提交之前引用2次提交。

答案 2 :(得分:1)

一般来说,重写历史不是一个好主意。在公共项目中,如果一个开发人员在重写之前设法获得原始树,这可能是线程中出现奇怪损坏的原因。

但是对于私有分支,您可能希望在与主服务器合并之前重写历史记录并隐藏错误。

看看:

How do I push amended commit to the remote Git repository?

也在这里:

Git Tools - Rewriting History

答案 3 :(得分:0)

请不要。 git reset --mixed <good-commit>--mixed是默认设置)保留现在的工作区文件,并将git存储的历史记录重置为<good-commit>。然后你可以解决这个问题(纠正你的损坏的文件)和git commit以便(首先)想到你想要的状态。