【问题标题】:Completely remove an earlier commit完全删除较早的提交
【发布时间】:2017-02-04 16:02:27
【问题描述】:

考虑以下提交历史:

* 627f412 (HEAD -> master) final commit
* 1425cf8 added some file
* 2c8bb78 initial commit

在这些提交期间,存储库既不会被推送,也不会被拉取。

第二次提交 1425cf8 是不必要的提交。我想完全删除该提交。

因此,新日志将如下所示:

* 627f412 (HEAD -> master) final commit
* 2c8bb78 initial commit

我如何做到这一点?

git reset --hard HEAD~1 在这种情况下是正确的做法吗?

【问题讨论】:

    标签: git git-commit git-reset


    【解决方案1】:

    在这种情况下 git reset --hard HEAD~1 是正确的做法吗?

    不是:git rebase -i 2c8bb78 是。

    您可以在交互式变基会话中删除额外的提交。 (如果您想完全放弃 1425cf8 引入的内容)
    或者你可以压缩这两个提交。

    为此,在交互式会话中(参见“Git Tools - Rewriting History”):

    • 在 627f412 前面为壁球添加 s

    请注意,最终结果不会为 627f412:新提交将具有不同的 SHA1,因为其内容会有所不同。

    【讨论】:

    • VonC 这是我git rebase -i 2c8bb78 时发生的情况。将打开一个编辑器窗口。带有以下内容:pick 1425cf8 添加了一些文件 pick 627f412 最终提交 我删除了第一行。保存了文件。这会导致:错误:无法应用 627f412... 最终提交 我做错了吗?我有 git rebase --abort 回到原来的状态
    • git-scm.com/book/en/v2/Git-Tools-Rewriting-History:你想删除 1425cf8 更改,还是用 627f412 压缩它们?
    • VonC 也可以。这是一个不应该的提交。此外,627f412 提交是我想要的,它包括 1425cf8 的所有内容
    • @deshmukh 好的。那就从壁球开始吧:看我编辑的答案。
    • VonC,我按照你修改后的答案做了。但是,没有运气。它产生的错误与我的第一条评论完全相同。我又做了一次中止的事情,让事情恢复原状。
    【解决方案2】:

    您可以将您的 HEAD(不带 --hard!)重置为 2c8bb78,然后提交更改。 或者基于 2c8bb78 进行 rebase 并压缩到另外两个提交(627f4121425cf8)。

    使用reset --hard,您可能会丢失所做的修改。

    【讨论】:

    • user4780495 我似乎处于不稳定的状态。请参阅我对@VonC 的 VonC 答案的评论。为了让事情更简单,您能否详细说明答案?
    猜你喜欢
    • 2018-09-13
    • 2012-07-01
    • 2015-11-05
    • 1970-01-01
    • 2018-03-11
    • 2013-02-13
    • 2020-09-14
    • 1970-01-01
    • 2011-03-07
    相关资源
    最近更新 更多