我如何在 git 中知道一个分支是否已经重新基于 master?

How can I know in git if a branch has been already rebased onto master?

这与 How can I know in git if a branch has been already merged into master? 非常相似,但它是关于检查变基代码的。在我目前正在处理的存储库中,似乎有一些功能分支在它们的更改重新基于 master 之后被搁置了。在删除分支之前检查是否已完成的最佳方法是什么?

该分支上的大多数建议建议使用分支上最后一次更改的 SHA id 密钥来检查它是否存在于 master 中。我可以看到这是确保合并的最佳方法,但是当您重新设置此 SHA 时,它会发生变化。

我有一个答案,我也会 post,但我想知道人们是否认为有更好的选择。

在master 分支的日志中通过feature 分支的最后提交消息搜索效果很好。

在主分支上执行:

 git log -i --grep="<summary>"

其中 是您的功能分支中最后一次提交的评论的一部分。这会向您显示主分支副本的提交 SHA、提交的作者和日期;最后两个由 rebase 保留。如果您的作者、日期和评论相似,那么您可以确信更改已重新基于您正在检查的日志的分支。

如果 rebase 用于将所有功能分支提交压缩到 master 上的单个提交,这将不起作用。

此方法可能还有其他问题,请在评论中post解决,或者尽可能提出更好的答案。

在变基忠实于原始提交消息的情况下,@TafT 的回答会很有效。此外,使用

git log --oneline --cherry master...some-branch

将显示 = 从某个分支完全相同复制到 master 的每个提交。

如果正在进行压缩等操作,提交消息会更改,或者如果您的变基发生冲突,则这两种解决方案都不起作用。在这种情况下,我建议如下(检查分离的 HEAD,这样我们就不会意外地推送这个合并):

git checkout master~0
git merge some-branch

除非你的代码发生了巨大的变化,否则如果合并后的结果没有变化,那么分支已经变基了。否则,显然没有。

您还可以将功能分支变基到主分支上。如果已经rebase了,feature分支在rebase之后不会再有master前面的commit,而是指向和master一样的commit。如果功能分支有 master 作为上游(git branch --set-upstream-to=master),那么您可以使用 git branch -d feature-branch 安全地删除分支,并且 git 将确保没有悬空提交。