0

我不小心向我的 git 存储库提交了一个损坏的文件。当我在笔记本电脑上工作并且电池没电时,就发生了损坏。我没有立刻意识到这最终出现在一个仅包含奇怪符号的文件中。但是,我将其提交给我的回购。

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

但是,日志显示损坏的文件仍在我的存储库树中。我现在的问题是:这是有问题的,还是我可以忘记它?有没有办法从回购中删除损坏的提交/文件?

4

4 回答 4

1

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

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

看着:

如何将修改后的提交推送到远程 Git 存储库?

也在这里:

Git 工具 - 重写历史

于 2013-03-24T21:48:28.020 回答
1

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

git reset --hard <commit>

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

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

于 2013-03-24T21:42:03.780 回答
1

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

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

于 2013-03-24T21:42:15.827 回答
0

请不要。git reset --mixed <good-commit>--mixed是默认值)保持工作区文件原样,并将 git 存储的历史记录重置为<good-commit>. 然后你可以修复它(纠正你损坏的文件)并git commit进入(大概)你想要的状态。

于 2013-03-25T01:37:09.410 回答