【问题标题】:remove remote commits that are not HEAD删除不是 HEAD 的远程提交
【发布时间】:2017-07-31 23:01:45
【问题描述】:

我遇到了一个棘手的情况。我需要删除并重新提交一些我已经推送到 github 远程仓库的提交。但是这些提交不再是 HEAD(人们将他们的提交放在上面)。

我知道我可以还原提交,因此保留了提交历史。但要求是让错误的提交消失

所以:

D <- other people's commit
|
C <- B and C are wrong commits! They need to be removed
| <- The changes that should be preserved from B and C will be
B <- committed on top of D
|
A <- this was the initial state

为了提供更多解释,我将 2 个不同的 GitHub 帐户用于工作/个人。我不小心使用个人 GitHub 帐户将 B 和 C 提交给公司回购。所以,我需要从非员工账户中删除这些提交

【问题讨论】:

    标签: git git-commit git-remote git-reset git-revert


    【解决方案1】:

    你不能这样做。

    问题是提交D 里面有提交C 的ID。您为摆脱 BC 所做的任何事情,如果它完全有效,会摆脱提交 D

    可以将提交 D 复制到一个新的 D',这很像 D,但是:

    1. 删除 BC 中的更改,并且
    2. 使用A 作为其父提交

    但如果你这样做了,你必须与现在提交D的其他人协调,尤其是写它的人,并得到所有的人切换到以 A 作为其父级的新 D' 副本。

    通常这不值得做。让其他 47 个人撤消和重做所有他们的工作太难了,只是为了弥补你之前犯下的错误。忍受错误。

    如果这个错误比让其他人因为让他们重做所有他们的工作而生你的气更糟糕,请参阅How to modify existing, unpushed commits?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-01-19
      • 2013-03-26
      • 2023-01-12
      • 2015-12-01
      • 2016-12-05
      • 2015-02-23
      • 2022-07-03
      相关资源
      最近更新 更多