如何删除未显示 'git rebase' 的提交?

How to remove a commit which does not show with 'git rebase'?

我有一个只有一个分支的仓库,名为 main

这是 git log --oneline --graph --all 的输出:

* 92033fe (HEAD -> main, origin/main) [test] Add some new tests
* 5e281c4 [style] Improve code formatting
* 50ccf6a release-1
| * 307cfba (tag: 1.0.0) release-1
|/
* 7d734b4 [feat] Add new feature
* 0b3c993 [fix] Fix some tests

这里发生的事情是我试图在事后将 50ccf6a 标记为 1.0.0,但做错了,现在我复制了这个,并且似乎分支了,提交307cfba,我想去掉它,而不影响分支的其余部分。

通常,我会 git rebase -i --root main,但是这个特定的提交不会出现在提交列表中,只有那些我打算保留的:

pick 0b3c993 [fix] [fix] Fix some tests
pick 7d734b4 [feat] Add new feature
pick 50ccf6a release-1
pick 5e281c4 [style] Improve code formatting
pick 92033fe [test] Add some new tests

这里发生了什么?

提交 307cfba 不在分支 main 上。如果您希望它脱离分支 main,那很简单:什么都不做,因为它已经不存在了。

由于标记 1.0.0,找到了提交 307cfba。如果你不想看到 307cfba ,即使有 git log --all,你也需要删除标签 1.0.0(或强行移动它,但如果您打算这样做,一个简单的方法是先删除它,然后重新创建它)。

您可以尝试使用 rebase 命令的 --onto 选项(为了安全起见,请在您的存储库副本上尝试这些步骤)。 首先删除您的标签,然后在需要的提交时重新创建它。

git tag -d 1.0.0
git tag -a 1.0.0 50ccf6a 
git rebase --onto 7d734b4 50ccf6a~1