Git 和 GitHub:如何硬重置本地和远程仓库
由 Mux 赞助的 DEV 全球展示挑战赛:展示你的项目!
本周歌曲
介绍
在讲解如何操作之前,我们先来看看什么时候应该这样做,什么时候不应该这样做。
如果你已经将相关的提交推送到了共享的远程仓库,就不要执行硬重置。如果其他开发者拉取代码并基于重置后从提交历史中移除的提交进行开发,将会造成严重的问题。
如果您是唯一使用本地和远程仓库的用户,或者重置会删除尚未推送到共享远程仓库的提交,则可以执行硬重置。在这种情况下,只有您自己会受到硬重置的影响,因此执行硬重置相对安全。只需在执行重置之前确认您确实想要删除相关的提交即可。
另外,简单提醒一下,此操作git reset --hard <commit-hash>会将 HEAD 指针移回指定的提交哈希值,暂存索引和工作目录将重置为该提交时的状态,并且指定提交之后的所有提交都将从提交历史记录中删除。这意味着暂存索引或工作目录中任何未提交的工作都将丢失。
如何硬重置本地存储库
为了简化示例,我创建了一个包含 README 文件的代码仓库,并且每次提交后,我都会添加一行与提交信息相匹配的内容。因此,经过四次提交后,我的 README 文件最终看起来像这样:
要重置本地仓库,首先需要知道要重置到哪个提交,以及该提交的哈希值。一种方法是运行以下命令git log。
假设查看完提交历史后,你想重置到“第二个提交”。那么,你需要记下或复制该提交的哈希值,然后运行:
git reset --hard <commit-hash>
根据示例,该命令如下所示:
运行硬重置命令后,工作目录现在看起来像这样:
从工作目录中可以看到git log,我们已经回滚到第二个提交,并删除了第三个和第四个提交。
如何对远程存储库进行硬重置
对远程仓库进行硬重置非常简单。重置本地仓库后,只需使用以下 git 命令强制推送即可:
git push -f <remote> <branch-name>
以上述示例为例,该 git 命令如下所示:
要点总结
- 仅当您是唯一使用远程存储库的人,或者您尚未推送要删除的提交时,才执行硬重置。
- 使用以下命令找到要重置到的提交的提交哈希值
git log。 - 运行以下命令执行本地硬重置
git reset --hard <commit-hash>: - 要硬重置远程仓库,请先硬重置本地仓库,然后再运行
git push -f <remote> <branch-name>
参考
封面图片:
使用 Git 根据提交 ID 回滚到特定提交 - stackoverflow.com;
将远程仓库重置到特定提交 - stackoverflow.com;
Git 重置 - Atlassian.com;
重置、检出和回滚 - Atlassian.com




