摆脱几个错误的提交

Get rid of several bad commits

我有一个我不跟踪 .gitignore 的回购协议,有人提交了 node_modules 文件夹,后来我们决定取消跟踪它。现在同一个人(git 的新手)提交了 '.gitignore' 几次提交,然后再次取消跟踪。现在我们遇到的情况是,如果我们检查旧的提交,它会从 repo 中删除几个未跟踪的文件,并且还会造成 'vs code' 由于数千个未跟踪的文件而变慢的情况。处理这种情况的最佳方法是什么?我想我需要压缩这些提交并将它们保存在单独的分支上,这样就不会有人不小心检查出来了。我还有其他选择吗?

随着事情的发生,

.gitignore was never tracked
node_modules were tracked
.gitignore was tracked
node_modules was untracked
.gitingore was untracked

您在 master 顶部描述的内容已修复,问题只是有人检查了旧版本的代码,其中的内容已损坏。

没有简单的方法来修复它。为此,您需要重写整个历史记录,并确保存储库的所有副本都使用新的历史记录进行了更新。这是组织的噩梦,您将永远错过一个将被推回主存储库的回购协议,然后您将回到初始状态。所以不要尝试。

唯一合理的解决方案是解决有人检出旧版本代码的情况。如果这是某个分支,例如:release-1.x.x 那么只需挑选一个提交即可将此问题修复到该分支。

如果开发人员必须检查特定代码 version/commit,只要此版本的代码需要一些维护,他们就不得不忍受这个问题。

重要的是要从这类问题中吸取教训:

  • 仅当您启动新项目时,始终创建并签入 .gitignore 存储库。
  • git hooks 有点难配置,但它是保护 repo 免受意外损坏的好解决方案
    • 请注意,有工具 github/gitlab/bitbucket/... 允许您配置拉取请求和配置 git 挂钩以保护特定分支。通过拉取请求代码审查是保护您免受意外(.gitignore 和 git 钩子未涵盖)不良更改的好方法
  • 当实习生加入项目时,确保他的 git 技能至少是基本的,并且他了解存储库应该跟踪什么以及不应该跟踪什么。