首页 > 解决方案 > 摆脱几个错误的提交

问题描述

我有我不跟踪的仓库.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

标签: gitgit-rebasegit-squash

解决方案


形成你所描述的顶部master是固定的,问题只是有人检查了旧版本的代码,其中的东西被破坏了。

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

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

如果开发人员必须将代码签出到特定版本/提交,只要此版本的代码需要一些维护,他们就必须忍受这个问题。

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

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

推荐阅读