我正在尝试获取特定分支的所有提交 id 的列表,
我只知道git ls-remote <git-repo-url> | awk '{print $1}'
给出了所有分支/头的最新提交。
我的目标是找出我从git rev-parse <branch_name>
获得的本地最新提交是否存在于从远程检索的所有提交的列表中。 如果是这样,我需要变基,如果远程上的最新提交 SHA 存在于本地提交 sha 列表中,那么但不是我的最新提交,这意味着我的分支在本地已经前进,我不需要变基,只需推送。
如果您要做的是确定您的本地分支是否与远程分支不同,我认为git-log
和三点符号会更好地为您服务。例如:
git log <local-branch>...<remote-branch> --oneline
将为您提供一个提交列表,这些提交位于local-branch
或remote-branch
中,但不能同时位于两者中。
如果您还添加了--left-right
,您将获得提交在哪一边的指示:
git log <local-branch>...<remote-branch> --oneline --left-right
其中<
表示提交在左侧但不在右侧,而>
表示在右侧但不在左侧。
编辑:除非您正在编写脚本,在这种情况下,git-merge-base
@axiac注释中建议的--is-ancestor
选项是更好的选择,因为您可以检查退出代码。