删除合并到主分支的提交

时间:2016-08-29 08:20:11

标签: git github branch

如何删除此紫色提交和"合并分支..."承诺。 我尝试使用" git rebase -i HEAD~x"但不行。

enter image description here

4 个答案:

答案 0 :(得分:2)

你可以使用git fast-export(在备份工作副本之后)做这种魔术: 在您的工作副本中运行git fast-export --no-data --all --full-tree > all_commits。然后在文本编辑器中打开文件all_commits,并搜索“初始提交”。它周围的环境应如下所示:

commit refs/heads/master
mark :110
author Foo Bar <foobar@example.org> 1462192582 +0100
committer Foo Bar <foobar@example.org> 1462192582 +0100
data 14
Initial Commit
deleteall
M 100644 b346ed4d2db0c8110fe3104bd155a413b878527c some/file

commit refs/heads/master
mark :111
author Foo Bar <foobar@example.org> 1462192582 +0100
committer Foo Bar <foobar@example.org> 1462192582 +0100
data 21
Merge branch 'master'
from :109
merge :110
deleteall
M 100644 b346ed4d2db0c8110fe3104bd155a413b878527c some/file
M 100644 4d9af842ccf23b883b234f5ae93d71f11fa285de some/other_file

commit refs/heads/master
mark :112
author Foo Bar <foobar@example.org> 1462192582 +0100
committer Foo Bar <foobar@example.org> 1462192582 +0100
data 14
Did some stuff
from :111
deleteall
M 100644 b346ed4d2db0c8110fe3104bd155a413b878527c some/file
M 100644 d6a0ad80d11b9d376c23d17300ce95d724d050e7 some/other_file

通过删除提交块并调整引用来裁减该提交(mark放置对提交的引用以便稍后识别它,frommerge识别承诺的父母):

commit refs/heads/master
mark :111
author Foo Bar <foobar@example.org> 1462192582 +0100
committer Foo Bar <foobar@example.org> 1462192582 +0100
data 21
Merge branch 'master'
from :109
deleteall
M 100644 b346ed4d2db0c8110fe3104bd155a413b878527c some/file
M 100644 4d9af842ccf23b883b234f5ae93d71f11fa285de some/other_file

commit refs/heads/master
mark :112
author Foo Bar <foobar@example.org> 1462192582 +0100
committer Foo Bar <foobar@example.org> 1462192582 +0100
data 14
Did some stuff
from :111
deleteall
M 100644 b346ed4d2db0c8110fe3104bd155a413b878527c some/file
M 100644 d6a0ad80d11b9d376c23d17300ce95d724d050e7 some/other_file

使用git fast-import --force < all_commits导入已更改的流。在此操作之后,违规提交已经消失。

当出现问题时,您可以使用git fast-import --force < all_commits.backup恢复原始提交,但在此操作之前创建备份并不是一个坏主意。

答案 1 :(得分:0)

你可以使用

git reset --hard HEAD~1

git reset --hard <sha1-commit-id>

如果你已经推了它

git push origin HEAD --force

答案 2 :(得分:0)

您可以通过重新定位要在最后一次有效提交之上保留的提交来完成。要查找要保留的提交,请创建两个分支tmp_1, tmp_2。这两个分支的HEAD将指向要保留的提交的端点。

现在,在最后一次有效提交的基础上重新提交这些提交。成功改造后强制重命名主人。

git checkout -b tmp_1
git checkout -b tmp_2 <sha-of-commit-after-merged-one>
git checkout -b tmp_3 <sha-of-commit-before-merged-one>
git rebase --onto tmp3 tmp_2 tmp_1

成功改造后,

git branch -f master tmp_3

删除其他分支。

答案 3 :(得分:0)

您可以使用以下命令恢复该提交: git revert&lt; Sha1&gt;