git - 重写 git 历史后替换 Prod Repo?

标签 git git-rewrite-history

我使用旧 The BFG 清除了我的 repo 的大文件历史记录并遵循描述的使用步骤。所以我现在有一个干净的裸仓库准备好被推回 GitHub。

生产目录是该存储库的克隆。

由于 HEAD 受到保护,这是否意味着在原则上,在推送到 GitHub 之后,我将能够 pull 入现有的产品克隆并获得“已经是最新的”。消息,然后我可以在必要时从该 prod repo 干净地推送回 GitHub?

或者如果我制作热生产模组以推送到 repo 协议(protocol),我会遇到麻烦吗? (这是一个非常古老的项目,里面有很多不好的做法。我有没有 git 技能的开发人员直接在 prod 中工作。)

最佳答案

好的,为了了解您的设置,您的存储库有 3 个副本:

  1. 您的本地副本,使用 BFG 清理
  2. GitHub 上的副本
  3. 生产 副本,我猜它位于某处的实时服务器上

您已准备好将清理后的本地历史推送到GitHub,但您想知道您需要对生产<采取什么最低限度的操作。我假设 localGitHubproduction 在您开始之前都已同步。

BFG does protect the 'contents' (特别是文件树)您的 HEAD 提交,但这并不意味着该提交的历史。虽然它保证提交中的文件不会改变,但 BFG 必须改变历史才能完成它的工作。因为 Git 小心地将历史视为(通常)不可更改,所以你不能只是 git pull这些更改通常会进入您的生产副本——不同的历史记录会被 Git 注意到,然后被拒绝。您试图清除的所有垃圾也将被保留,如果您不小心,就有可能将其推回 GitHub。

取而代之的是获取更改,告诉 Git 明确强制每个本地分支历史记录到新的、清理过的版本:

$ git fetch origin *:* -f --update-head-ok

(--update-head-ok 标志是为了避免 Refusing to fetch into current branch 错误)

在那之后,您应该可以获取任何新的历史记录,如果需要的话,甚至可以将热门的生产模组推送回 GitHub。

关于git - 重写 git 历史后替换 Prod Repo?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27734385/

相关文章:

java - git - 推送 java .classpath 文件?

可能破坏/重写历史的 Git 命令

git - 如何更改多个提交的作者和提交者姓名/电子邮件?

git - 以增量方式使用过滤器分支的任何方式

linux - git 错误与 git 已知的任何文件都不匹配

git - `git-p4 clone` 失败 "new tip ... does not contain ..."

git - 如何撤消 git config --system core.askpass git-gui--askpass

git - BFG使用无效后,Git merge 重复

git - 如何使用 BFG repo cleaner 删除一个文件夹/目录?

python - 安装 pybrain