我不小心向我的 git 存储库提交了一个损坏的文件。当我在笔记本电脑上工作并且电池没电时,就发生了损坏。我没有立刻意识到这最终出现在一个仅包含奇怪符号的文件中。但是,我将其提交给我的回购。
现在我设法通过使用恢复到以前的非损坏版本,git revert HEAD^
并且我有一个文件的非损坏版本。到目前为止,一切都很好。
但是,日志显示损坏的文件仍在我的存储库树中。我现在的问题是:这是有问题的,还是我可以忘记它?有没有办法从回购中删除损坏的提交/文件?
一般来说,重写历史不是一个好主意。在公共项目中,如果一位开发人员设法在重写之前获得原始树,这可能是线程中奇怪损坏的原因。
但是对于私有分支,您可能希望在与主分支合并之前重写历史记录并隐藏错误。
看着:
也在这里:
要回滚到以前的提交,请使用
git reset --hard <commit>
假设您当前在一个分支上,这会将分支头设置为指定的提交,并将您的工作树签出到该提交。这将破坏任何未提交的更改!
如果您稍后想要撤消该操作,您可以使用它git reflog
来查找先前的提交 ID。
如果您没有推送更改,git revert
可能不是您想要的。它会进行一个新的提交,以反转所做的更改。
用于git reset --hard <last good commit>
删除错误提交。您可以像以前一样使用引用来解决此提交HEAD
,但这不会调整分支中的提交。如果您使用分支名称引用最后一个已知的良好提交,例如git reset --hard <branch>~2
引用当前提交之前的 2 个提交。
请不要。git reset --mixed <good-commit>
(--mixed
是默认值)保持工作区文件原样,并将 git 存储的历史记录重置为<good-commit>
. 然后你可以修复它(纠正你损坏的文件)并git commit
进入(大概)你想要的状态。