Git - 以编程方式确定本地提交是否尚未推送

sve*_*son 5 git bash push

我已经看到很多关于如何显示所有尚未提交的本地分支的所有本地提交的帖子/答案。

我的用例很窄,还没有找到答案。

我需要从 bash 脚本中确定我的当前分支是否有尚未推送到上游同一分支的提交。计数就可以了,但我真的只需要知道推送是否尚未完成。除了当前分支之外,我不关心任何分支,在这种情况下,我已经检查了该分支是否是本地的(即尚未设置上游原点)。

主要是,我不想打印出提交。我只想知道未推送的提交数量 > 0。

Sch*_*ern 7

当前分支的上游是@{u}@是 的同义词HEAD

@..@{u}选择上游但不是本地的提交。如果有的话你就落后了。我们可以用 来计算它们git rev-list

# Move 4 commits behind upstream.
$ git reset --hard @{u}^^^

$ git rev-list @..@{u} --count
4
Run Code Online (Sandbox Code Playgroud)

@{u}..@则相反。它选择本地但不是上游的提交。

# Move to upstream
$ git reset --hard @{u}

# Add a commit
$ git commit --allow-empty -m 'test'
[main 6dcf66bda1] test

$ git rev-list @{u}..@ --count
1
Run Code Online (Sandbox Code Playgroud)

如果两者都是 0,则说明是最新的。

注意:这仅是您上次获取时的“最新”内容。是否要将其与 fetch 结合起来取决于您,但您应该习惯 Git 不定期与网络通信这一事实。

(我借用了ElpieKay的答案)。

请参阅gitrevisions了解有关 的更多信息@以及..选择修订版本的多种方法。