4

我有一个本地及其相应的 github 存储库。我有一些承诺

A <- B <- C <- D

A 是最新的。

这是两个回购的情况。我想删除提交 C,就好像它从未发生过一样。

所以它应该像git log

A <- B <- D

在两个回购。

我试过git reset --soft <sha-commit-C>了,现在卡住了。我看不见A, B。在做任何进一步的步骤之前,我想完全确定我知道我在做什么。

git reflog给我 :

git reflog
73ea54d HEAD@{0}: reset: moving to 73ea54d8
a594699 HEAD@{1}: rebase -i (finish): returning to refs/heads/unique_ptr_release
a594699 HEAD@{2}: checkout: moving from unique_ptr_release to a594699fb6f7d85bc8
a594699 HEAD@{3}: checkout: moving from unique_ptr_release to unique_ptr_release
a594699 HEAD@{4}: commit (merge): Merge branch 'master' into unique_ptr_release

HEAD@{4}是我的头在reset --soft命令之前的样子。

我该如何摆脱这种情况?

4

2 回答 2

7

Git-rebase是你要找的。

在您的情况下 commit A-B-C-D,并想删除 C,请尝试:

git rebase -i HEAD~3

它将通过编辑器显示您的最后 3 个提交(我的是 vim),只需删除(在 vim: 中dd)您要删除的提交行,然后保存它(在 vim: 中:wq)。

完成,查看git log,您将看到C提交已被删除。

*不要忘记备份您的代码或 .git 文件夹。

于 2013-09-06T11:12:45.300 回答
1
  1. 确保备份 .git 文件夹。
  2. 确保提交 D ,不要依赖 C 中所做的更改。
  3. git rebase --onto DB~1 (因为 A 是最新的提交)
于 2013-09-06T10:48:36.357 回答