我遇到了项目存储库中某些提交重复的问题。不幸的是,导致此重复的错误发生在四个月前,所以我对导致此问题的原因记忆不深。
该项目可在此处找到:https://github.com/benvessely/brevets。这一切的开始是因为我意识到我无意中跟踪了存储库中的机密文件 credentials.ini 一段时间,该文件随后被推送到 Github。我想从提交历史记录中删除此文件,因此我使用了 git filter-repo,我认为它工作正常。我记得在这里做了一些涉及 pull 和 rebase 的操作,但我再次记不清具体做了什么。很抱歉我无法提供更多帮助。
这种推送/拉取发生在哈希以 a72b0 开头的提交之后。然后我又做了几次提交,然后在最近的一次提交时做了某种合并。不幸的是,我真的不记得我为什么要做这个合并,也git show
没有人告诉我任何事情。此后,我停止了这个项目 4 个月,显然没有注意到我的存储库中的重复。
我现在的情况是,在哈希值为 4aa07 和 a3dee 的提交之间(不包括),我相信有两个分支有重复的提交,一个包含 credentials.ini 文件,另一个不包含。提交确实有不同的哈希值,但它们包含相同的消息和相同的文件,credentials.ini 是唯一的区别。对于所有提交,直到 4aa07(复制之前)和超过 a3dee(复制之后),提交也没有 credentials.ini 文件。只是中间的部分是重复的,并且仍然包含坏文件。
需要注意的一点是,当我使用 git log –graph 时,它显示了图表的一些奇怪偏差,这让我认为合并可能是问题的一部分。我对所有这些概念的理解仍然不是完全牢固的,但看起来有问题的分支来自远程,然后被合并到我的本地分支中。
基本上,我想知道如何摆脱那些包含机密文件的重复提交?我知道这可能是一个棘手的问题,因为我无法提供详细信息,但如果有人愿意看看这个问题并告诉我他们的想法,我将不胜感激。提前致谢!
您的存储库如下所示。
我猜 a72b0d4 是过滤前的历史记录,而 2399188 是您想要保留的新历史记录。我进一步猜测,过滤后您尝试了
git push
,而 Git 说您的分支已“分叉”,您应该git pull
修复此问题。git pull origin master
是 agit fetch origin
+ agit merge origin/master
,它从远程获取了您的旧主控并将其与您的新主控合并,“解决”了分叉问题。分支只是指向提交的标签。我们可以在合并之前使用 将 master 移至 2399188 来删除重复项。然后,我们可以使用名称令人困惑的force push with lease
git reset --hard
安全地在远程服务器上移动 master 。