从早期的git commit中删除敏感线

时间:2018-05-12 23:01:26

标签: git

我很难从早期的提交中删除包含一些敏感信息的单行。

让我们说我的git日志如下所示

b200bbe (HEAD -> master) A
67a8df7 B
47a6947 C
a55540f D
68b51d5 E

现在我在我的一个测试文件中看到我创建了一个调试行,在提交时打印出一些敏感信息

如果我只是删除该行并提交更改,那么如果在提交E和新提交之间浏览文件,人们就能看到该行。

有很多文章解释了如何从git树中删除一个完整的文件,但我找不到只删除一个行的方法。 filter-branch --tree-filter似乎是最接近的,但我仍然需要提交更改,而git diff会暴露从命令中删除的行。

自提交E以来,没有提交过任何提交且没有分支。是否可以从完整的git树中删除文件中的单行?

1 个答案:

答案 0 :(得分:2)

您可以尝试git rebase -i

按照你在问题中使用的例子,假设A在远程仓库中,但是B,C,D和E不是,在使用git rebase之后你会得到一个这样的屏幕:

pick 67a8df7 B
pick 47a6947 C
pick a55540f D
pick 68b51d5 E

然后你需要像这样编辑提交E行:

pick 67a8df7 B
pick 47a6947 C
pick a55540f D
edit 68b51d5 E

最后,删除所需的行,提交更改并使用git rebase --continue继续。

git rebase documentation的更多信息。