代码之家  ›  专栏  ›  技术社区  ›  cookie

如何删除或修改已重新引入的先前删除的Git提交

  •  0
  • cookie  · 技术社区  · 2 年前

    我最近遇到了一个Git问题,它导致了一些问题,我正在寻求一些关于如何解决它的建议。情况如下:

    我正在处理我们的存储库,不小心用我的个人用户名而不是工作帐户推送了一个提交。为了纠正这一点,我从Git历史记录中删除了提交并重新发布了这项工作。在这一点上,一切看起来都很好——提交在Visual Studio或Bitbucket上不再可见,工作仍然按预期完成。

    然而,一位小组成员后来被推到了存储库,并以某种方式重新引入了之前删除的提交。更糟糕的是,这次提交不再是最新的一次,此后又添加了几个分支。它也被并入了主分支。

    我想永久删除这个提交,或者至少更改与之相关的用户名和电子邮件,因为它包含个人信息,而且永远有这样的东西显然是不专业的。我遇到过 this 关于Bitbucket的文章,其中建议使用重新定基来解决这个问题。然而,我以前从未重新设置过基础,我担心可能会破坏任何东西,特别是考虑到分支的数量以及它已合并到主分支的事实。

    我的问题是:在这一点上,我能做些什么来永久删除或编辑这个提交吗?还是我不得不处理它?

    如有任何关于如何处理这种情况的指导或分步说明,我们将不胜感激。提前感谢您的帮助。

    当我第一次提交时,我试图删除它,这很有效,直到一个小组成员推了推,不知怎么又把它带回来了。现在我不知道如何在不破坏很多东西的情况下解决这个问题。

    1 回复  |  直到 2 年前
        1
  •  0
  •   2189490    2 年前

    我知道可能还有其他方法可以处理这个问题,但当我不小心推到Bitbucket时,我会这样做,这需要一些跑腿工作,然而,我可以预见地理解细粒度控制会发生什么:

    备份故障分支

    1. 检查/拔出故障分支
    2. 使用 git switch -c branch_backup_name 备份分支
    3. 将备份的分支推送到服务器

    删除计算机上故障分支的本地版本

    git branch -D branch_to_fix
    

    在错误的提交之前签出提交(例如,如果757c47d4是您个人帐户的提交之前的提交),并重命名为您正在修复的分支

    git checkout 757c47d4
    git switch -c branch_to_fix
    

    在Bitbucket中删除服务器上的故障分支

    1. 点击左侧菜单上的分支,列出Bitbucket中的分支
    2. 单击上下文菜单的3个垂直点
    3. 删除故障分支(而不是备份分支)

    重新添加更改

    1. 编辑你的代码库
    2. git add .
    3. git commit -m "Your commit message"

    Cherry从备份分支中选择您想要的单个提交(您的其他提交、同事的提交等)

    按照最初承诺的顺序执行此操作非常重要。如果你在Bitbucket中查看,默认情况下它将是自下而上的。

    git cherry-pick 12345678
    git cherry-pick ...
    

    将您的本地分支推送到服务器(根据您的git设置,您可能会被要求设置上游)

    git push
    

    此时,您应该拥有有故障的备份分支以及通过手术删除提交的新分支。如果您愿意,可以选择删除备份分支(只要一切正常)。您的同事需要使用在本地删除分支 git branch -D branch_to_fix 并从服务器上签出您的新分支。