在其他提交之间删除提交

时间:2013-09-06 10:06:15

标签: git github

我有一个本地及其相应的github repo。

我有一些提交
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命令之前我的头。

我如何摆脱这种情况?

2 个答案:

答案 0 :(得分:6)

你正在寻找

Git-rebase

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

git rebase -i HEAD~3

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

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

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

答案 1 :(得分:0)

  1. 确保备份.git文件夹。
  2. 确保提交D,不要依赖于C中所做的更改。
  3. git rebase --onto D B~1(A是最新的提交)