如果你不小心提交了一些你不应该的东西,并将它推送到 Github,仍然有方法可以删除或修改它。通常,您不想弄乱 Git
的历史记录,但在某些情况下,如果做得正确,它是安全的。

如果可以避免,请不要这样做
从 Git 的历史记录中删除提交通常是一个坏主意。Git 旨在跟踪文件的每个版本,并且总是有删除的替代方法,例如git
revert,可以保持历史记录完整无缺。

一旦它在一个远程存储库上,比如
Github,就很难完全摆脱提交。这是因为使用该存储库的任何其他人都将拥有该存储库的自己的本地副本,强行删除提交将使它们不同步。

仍然有一些原因可以这样做——也许你不小心将私有数据提交到了公共存储库,无论你做什么,它仍然会在历史记录中可见。这会给您的同事带来一些问题,但即使在这种情况下,也可以使用强制推动。

<>在本地修复提交

如果您在本地工作,并且尚未将更改推送到 Github,则可以安全地重置或修改不在远程上的提交。Git 会跟踪您的本地目录、在内部暂存更改并保留 Git
历史记录。这一切都与遥控器保持同步,但仅在运行push/pull. 在你推送之前,Github 不关心你的 repo 的状态。

如果您只是在提交文件时犯了一个错误,您可以进行软重置并进行新的提交。如果您想将多个提交合并为一个,这实际上是司空见惯且有用的,称为“压缩”。如果您想完全放弃更改,您也可以这样做(通过–hard
重置)。

如果你还没有推送到 Github,你可以通过软重置来恢复最近的提交,这根本不会影响你的本地文件,但会让你从一开始就不会向 Git 提交更改。
git reset --soft HEAD~
如果您只想向最近的提交添加新文件/更改,Git 内置了一个标志来做到这一点:
git commit --amend --no-edit
<>恢复(Github 安全)

如果您想撤消已经推送到 Github
的提交的更改,那么安全的方法是还原。还原将生成“相反的提交”,这将基本上撤消特定提交的所有更改。如果你添加了一行,它会被删除,如果你删除了一个文件,它会被添加回来。

这是安全的,因为它不会更改历史记录,只会在其上添加新历史记录。您可以将还原提交推送到 Github,并让您的同事运行git pull 以获取更新。

首先,运行git log 以获取提交列表:

然后,复制 SHA1 哈希并恢复提交:
git 恢复 62ff517cc7c358eaf0bffdebbbe1b38dea92ba0f
<>强制重置(不安全)

如果你真的想移除一个提交,那么这样做的方法是在本地移除它,然后强制推送到Github。由于这是
非常危险的,并且可能会弄乱您同事的本地存储库,如果您仍然想要,您可能需要在 Github 的存储库设置中禁用强制推送分支保护:

然后,您可以在本地删除提交,如果它是最新提交,这是最简单的:
git reset --soft HEAD~
您还可以执行交互式 rebase,如果提交不是最新提交,这将很有用。例如,如果提交是 12 次之前的提交,您可以从那时起变基,删除有问题的提交,然后保存。
git rebase -i HEAD~12
一旦您的本地存储库正常工作,您就可以强制推送到 Github。
git push origin master --force
确保您的回购是最新的!如果远程分支有您没有的更改,它们将被此推送覆盖。

您可能希望与您的团队成员协调这一点,因为您可能必须 ping 他们并告诉他们运行 fetch 和 reset:
混帐git reset origin/master --soft
<>将提交移动到不同的分支

如果您不小心提交到错误的分支,并想删除提交并将其移动到正确的分支,Git 中有一些工具可以处理。您可以阅读我们的移动提交指南以了解更多信息,但同样的原则适用
- 如果您需要完全删除提交,则必须强制重置。如果您对恢复没问题,您可以简单地恢复和挑选。

技术
今日推荐
下载桌面版
GitHub
百度网盘(提取码:draw)
Gitee
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:[email protected]
QQ群:766591547
关注微信