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

时间:2016-03-16 12:22:36

标签: git bitbucket sourcetree

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

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

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

如果有人可以建议我如何清理它,我将非常感激。

3 个答案:

答案 0 :(得分:1)

不是sourcetree用户,而是使用rebase清理历史记录。

git rebase -i HEAD~x

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

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

答案 1 :(得分:1)

如果提交次数不是那么多,那么创建一个新的分支并使用git cherry-pick获取提交,你需要逐个解决它可能是一个解决方案。因为你可以编写脚本来做到这一点。完成后,您可以删除不想要的旧分支。

顺便说一下。

  

我认为壁球会用其父

压缩提交

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

答案 2 :(得分:1)

agrias提出评论之后

  

“Pub-201603141450”是一个分支吗?

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

我想如果我没有遇到SSH密钥问题并继续执行https://help.github.com/articles/remove-sensitive-data/中的第7步,那么它会移动我的代码并避免此问题。