Git永久删除单个分支上的提交序列

时间:2018-03-24 17:14:06

标签: git

我有一个私有github仓库,只有少数开发人员使用,我不小心提交了一个包含密码/敏感数据的文件,并在一个名为develop的分支上推送了一些提交。

我相信没有其他开发人员做过更改,并且可以为最后几次提交重写历史记录。开发分支尚未合并到任何其他分支机构。

我可以回滚到不包含任何密码/敏感数据历史记录的特定提交的正确方法是什么,并永久删除后续提交(以便密码/敏感数据不在历史记录中)。

我有一个副本,可以轻松处理自上次已知良好提交以来代码更改的复制。请注意,它返回约3次(每次推送)。

1 个答案:

答案 0 :(得分:1)

一种选择是使用(交互式)rebase。

  1. 结帐分行
  2. 启动交互式rebase,例如最后3次提交:git rebase -i head~3
  3. 弹出一个文件*,这些是3次提交。您可以编辑提交,我们完全删除它。 例如:

    pick ae1333333 commit1
    pick ae1333442 commit2
    pick ae1334477 commit3
    
    # Rebase be8b6221ee..170e76c22 onto be8b622ee (3 commands)
    #
    # Commands:
    # p, pick = use commit
    # r, reword = use commit, but edit the commit message
    # e, edit = use commit, but stop for amending
    # s, squash = use commit, but meld into previous commit
    # f, fixup = like "squash", but discard this commit's log message
    # x, exec = run command (the rest of the line) using shell
    # d, drop = remove commit
    #
    # These lines can be re-ordered; they are executed from top to bottom.
    #
    # If you remove a line here THAT COMMIT WILL BE LOST.
    #
    # However, if you remove everything, the rebase will be aborted.
    #
    # Note that empty commits are commented out
    
  4. 保存并关闭文件。

  5. 这确实是重写历史记录,因此您需要强制推送:git push --force-with-lease
    • 您也可以使用git push --force,但force-with-lease更安全。
  6. *:或在控制台中显示内联,具体取决于您在git中配置的文本编辑器。