我如何在 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 将确保没有悬空提交。
这与 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 将确保没有悬空提交。