摆脱几个错误的提交

时间:2021-06-02 12:53:51

标签: git git-rebase git-squash

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

1 个答案:

答案 0 :(得分:1)

您在 master 顶部所描述的形式已修复,问题只是有人检查旧版本的代码,那里的东西已损坏。

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

唯一合理的解决方案是当有人检出旧版本代码时的地址场景。如果这是某个分支,例如:release-1.x.x,那么只需挑选一个提交来修复该分支的问题。

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

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

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