我不小心将文件提交给了我的git repo,这个文件已经损坏了。 当我在笔记本电脑上工作并且电池电量耗尽时,就发生了腐败。我没有立刻意识到这最终只出现在一个由奇怪的符号组成的文件中。但是,我把它交给了我的回购。
现在我设法使用git revert HEAD^
恢复到以前的非破坏版本,并且我有一个未损坏的文件版本。到目前为止一切都很好。
但是,日志显示已损坏的文件仍在我的仓库树中。 我现在的问题是:这有问题吗,还是我可以忘掉它?有没有办法从repo中删除那个损坏的提交/文件?
答案 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?
也在这里:
答案 3 :(得分:0)
请不要。 git reset --mixed <good-commit>
(--mixed
是默认设置)保留现在的工作区文件,并将git存储的历史记录重置为<good-commit>
。然后你可以解决这个问题(纠正你的损坏的文件)和git commit
以便(首先)想到你想要的状态。