删除合并到主分支的提交
Delete commit which is merged into main branch
如何删除这个紫色提交和 "Merge branch..." 提交。
我尝试使用 "git rebase -i HEAD~x" 但没有用。
你可以使用
git reset --hard HEAD~1
或
git reset --hard <sha1-commit-id>
如果你已经推送了它
git push origin HEAD --force
您可以通过将要保留在上次有效提交之上的提交变基来实现。为了找到要保留的提交,创建两个分支 tmp_1, tmp_2
。 HEAD
这两个分支都将指向要保留的提交端点。
现在,将这些提交重新设置在最后一个有效提交的基础上。成功变基后强制重命名 master。
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
rebase成功后,
git branch -f master tmp_3
删除其他分支。
您可以使用以下命令还原该提交:
git 还原 < Sha1 >
你可以用 git fast-export
做这种魔术(在你备份你的工作副本之后):
运行 git fast-export --no-data --all --full-tree > all_commits
在您的工作副本中。然后在文本编辑器中打开文件 all_commits,并搜索 "initial commit"。它周围的环境应该是这样的:
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
放置对提交的引用以便稍后识别它,并且 from
或 merge
识别提交的 parents):
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
恢复原始提交,但在此操作之前创建备份是个不错的主意。
如何删除这个紫色提交和 "Merge branch..." 提交。 我尝试使用 "git rebase -i HEAD~x" 但没有用。
你可以使用
git reset --hard HEAD~1
或
git reset --hard <sha1-commit-id>
如果你已经推送了它
git push origin HEAD --force
您可以通过将要保留在上次有效提交之上的提交变基来实现。为了找到要保留的提交,创建两个分支 tmp_1, tmp_2
。 HEAD
这两个分支都将指向要保留的提交端点。
现在,将这些提交重新设置在最后一个有效提交的基础上。成功变基后强制重命名 master。
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
rebase成功后,
git branch -f master tmp_3
删除其他分支。
您可以使用以下命令还原该提交: git 还原 < Sha1 >
你可以用 git fast-export
做这种魔术(在你备份你的工作副本之后):
运行 git fast-export --no-data --all --full-tree > all_commits
在您的工作副本中。然后在文本编辑器中打开文件 all_commits,并搜索 "initial commit"。它周围的环境应该是这样的:
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
放置对提交的引用以便稍后识别它,并且 from
或 merge
识别提交的 parents):
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
恢复原始提交,但在此操作之前创建备份是个不错的主意。