删除不是HEAD

时间:2017-03-10 14:46:40

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

我有一个棘手的情况。我需要删除并重新提交一些我已经推送到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提交给公司回购。因此,我需要从非员工帐户中删除这些提交

1 个答案:

答案 0 :(得分:0)

你做不到。

问题是提交D内部有提交C的ID。你为摆脱BC所做的任何事情,如果它完全有效,摆脱了提交D

可以将提交D复制到与D'非常相似的新D但是:

  1. 删除BC以及
  2. 中的更改
  3. 使用A作为其父提交
  4. 但是如果你这样做,你必须与现在提交D的其他人一起协调,尤其是那些写过它的人,并且所有人 切换到以D'为父级的新A副本。

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

    如果错误比让其他人为了让他们重新做所有他们的工作而更加生气,请参阅How to modify existing, unpushed commits?