【问题标题】:How do I revert a commit that I forgot to squash in git?如何恢复我忘记在 git 中压缩的提交?
【发布时间】:2022-10-24 04:20:14
【问题描述】:

当我真正想做的是一个 squash 和 merge 时,我不小心合并了一个 Pull Request。结果,我的提交历史现在包含来自该 PR 的约 20 个单独的提交。

我的目标是双重的

  1. 恢复到上次“良好”提交
  2. 从我的提交历史中清除“错误”提交

    大多数这些“坏”提交出现在最后一次“好”提交之后,但是其中少数出现在最后一次“好”提交之前(我猜这是由于他们的提交日期),我担心这会让我的事情变得复杂。

    幸运的是,自从犯了这个错误以来,没有任何额外的提交。

    根据我迄今为止的研究,我可以通过执行以下操作恢复到最后一个“好”提交:

    git reset --hard <commit-before-the-merge>
    

    但是鉴于“坏”提交出现在最后一次“好”提交之前和之后,我不确定这会解决问题,而且我不想在没有合理信心的情况下尝试它会起作用。

    上面提到的命令可以解决问题,还是我应该使用一组不同的命令来让自己摆脱这种混乱?

【问题讨论】:

  • “坏”提交不应成为“好”提交历史的一部分。您可以确认这一点:在您的 git reset --hard ... 之后运行 git log --oneline --graph

标签: git github


【解决方案1】:

时间上的前后,即旧的或新的,应该无关紧要。对 Git 来说重要的是祖先提交的数量,这纯粹是通过每个提交对象中的parent: 行定义的。

使用 git log 检查是否会重置任何无效提交:

git log $last_good_commit..$bad_commit

但即使它包含您想要保留的提交,您也可以始终使用git cherry-pick 创建具有相同补丁的新提交。

【讨论】:

    猜你喜欢
    • 2017-10-16
    • 2021-03-17
    • 2018-10-17
    • 2011-08-05
    • 1970-01-01
    • 2010-10-10
    • 2016-05-22
    • 2012-11-20
    • 2013-01-08
    相关资源
    最近更新 更多