Git 从历史记录中删除重复提交

Git remove duplicate commits from history

所以....我说尝试从历史记录中删除一个文件,因为它包含一个密码(我知道 - 从一开始就应该在 gitignore 中!)。我按照 https://help.github.com/articles/remove-sensitive-data/ 到第 6 点,但我的 SSH 密钥被 Git Bash 使用时遇到问题(通常使用 sourcetree 将存储库存储在 BitBucket 上),现在必须修复我的历史记录中有所有提交的副本(最近的两个除外)。

在查看父项时,重复提交是独立的。实际上,看起来好像有两个从未合并过的 master 分支。

下面是我日志的顶部和底部: Top and bottom of log

如果有人能建议我如何清理它,我将不胜感激。

不是 sourcetree 用户,但你用 rebase 清理了你的历史记录。

git rebase -i HEAD~x

其中 x 是您要返回的提交数。

如果您只想直观地清理您的历史记录并保留提交,您可以使用 squash 选项。如果你想完全删除提交,你可以通过删除编辑器中的行来删除提交。

如果commit的次数不是很多,那么新建一个分支然后使用git cherry-pick get commit 一个一个的来解决或许是一种解决方法。因为你可以编写脚本来做到这一点。完成后,您可以删除不需要的旧分支。

顺便说一句。

I thought squash would squash a commit with its parent

这是不正确的,git rebase -i 提供了几个选项,而不仅仅是压缩与其父级的提交。

agrias

发表评论后

Is "Pub-201603141450" a branch?

(这是一个标签) 我意识到我所有的标签都在旧的提交上。删除这些标签或将它们移动到新版本的提交从我的历史记录中删除了旧提交。不太熟悉标签,我想这些都有自己的历史。

我想如果我没有遇到 SSH 密钥问题并继续 https://help.github.com/articles/remove-sensitive-data/ 中的第 7 步,它就会移动我的标签并避免这个问题。