【问题标题】:Delete Github commit history删除 Github 提交历史
【发布时间】:2011-10-26 07:05:27
【问题描述】:

无论如何我可以删除我的 github 提交历史记录吗?我不想丢失我所有的提交,只是最后 10 个左右被推送到 github。我似乎无法弄清楚如何做到这一点。

【问题讨论】:

  • 参见stackoverflow.com/questions/495345/… 请注意,如果有其他人在同一个存储库上协作,那么做这种事情是个坏主意。通常最好克服历史的坎坷,继续前进。

标签: git github


【解决方案1】:

安装 Git 后,您还可以右键单击您的存储库文件夹 - Git GUI Here

选择存储库 - 可视化所有分支历史

右键单击所需的提交 - 将主分支历史重置到此处

现在您有 3 个选项:

选择后,选择文件 - 重新加载

GitHub Desktop 中选择 Revert on a commit 后设法解决了这个问题,然后再次 Revert 以便我们回到原始代码,然后只是希望清理这两个 Revert 提交。

【讨论】:

    【解决方案2】:

    如果你想这样做,你可以使用HEAD~10

    git reset --hard HEAD~10
    
    git push -f origin master
    

    不建议删除服务器提交历史记录,尤其是:如果您有一个团队正在处理此 repo。

    如果您有一个团队致力于此,我建议您通过添加另一个撤消您不想要的代码的提交来回退。

    【讨论】:

      【解决方案3】:

      只需选择您想要返回的哈希并在您的克隆中执行:

      git reset --hard hash# 
      git push -f origin branch
      

      其中branch 是您要推送的分支的名称。瞧。小心用力推动。您可能需要复制您的工作目录,直到您熟悉它为止。

      【讨论】:

      • 工作就像一个魅力!除了我没有意识到分支意味着我的分支的名称:P
      • 如何找到哈希#?
      • 我使用 tig 查看我的哈希历史以找到我想要返回的那个。您还可以使用 gitk 或 git log 或其他工具,如源代码树。存在多种选项来检查历史记录并找到哈希
      • 这不应该是公认的答案。这不会删除历史,只是将历史重置到前一点。仍然可以使用哈希标识符访问所有提交。请阅读@Droogans 发布的Delete sensitive information
      • @CharlesPrakashDasari Git reflog 是一个很好的起点。帮助恢复意外删除或覆盖或强制拉取。更不用说 github 缓存了那里的页面,所以有可能(虽然不太可能)有人访问了该页面并可能已将其添加为书签(如之前提供的链接中所述)也许我误解了作者的问题。
      【解决方案4】:

      我已将我的所有文件上传到我的第一个 github 项目,包括一些带有密钥的设置文件。在添加 .gitignore 文件之前,我必须返回并删除包含的所有版本,并从我的项目缓存中删除所有设置文件。

      How I did this:

      gedit ./.git/logs/HEAD

      找到您希望删除之前所有内容的“新根”的 40 个字符的 SHA 哈希。将其复制到剪贴板并关闭它。 (你可以使用也可以不使用gedit,一个linux的默认文本编辑器)。

      $> gedit ./.git/info/grafts

      在此处粘贴 SHA。转到您的项目目录。

      $> cd ../..

      $> git filter-branch

      强制推送到主服务器,否则会阻止你擦除历史记录的尝试。

      $> git push --force -u origin master

      删除您的grafts 文件。

      $> rm ./.git/info/grafts

      没关系

      好吧,我的回答只是成功了一半。我的公共活动 RSS 提要仍然具有指向所有差异的链接,这些差异详细说明了我想要删除的信息。显然,there is no way to delete this,但您可能应该阅读Change your Password,并更新您可能不小心上传的所有敏感数据。

      【讨论】:

      • 我只是想补充一下,因为我今天遇到了它,因为我为自己创造了一个非常不寻常的情况。但是,一旦你完成了Remove Sensitive Data 步骤,你可以做的一个解决方案是,创建一个新的存储库并推送你所有的 now clean 提交,然后删除旧的存储库。这会使公共活动提要中指向旧分支/差异的链接无效,并且 github 将抛出 404,因为 repo 不再存在。
      猜你喜欢
      • 2023-01-22
      • 2017-04-11
      • 1970-01-01
      • 2014-07-07
      • 2012-11-22
      • 2015-09-02
      • 2019-11-14
      • 2013-01-23
      • 2018-11-04
      相关资源
      最近更新 更多