Git:如何检查本地分支是否有被跟踪的遥控器没有的提交?

时间:2013-03-22 01:53:25

标签: git

需要在脚本中执行此操作。谢谢。

4 个答案:

答案 0 :(得分:2)

我使用以下命令(作为别名)列出未推送到远程存储库的所有本地提交。

log --oneline --decorate=short --graph --all --branches --not --remotes

这需要修改以便在脚本中使用,并且可能有管道命令执行相同的操作,但我发现它很有用。

关键在于最后几个论点:

  • --all包含refs/中的所有引用 - 如果您只想要当前分支的提交,则可能不希望这样。
  • --branches包含refs/heads中的所有引用 - 将其保留为当前值,或明确指定分支以限制提交列表。
  • --not --remotes包含了魔力 - 确保列出的所有提交都不在refs/remotes中。

编辑> 看起来git rev-list ... plumbing命令有类似的参数,但我没有测试它以了解它是否有效。建议使用管道命令来编写脚本,因此请查看它 - man-page以供参考。

希望这有帮助。

答案 1 :(得分:1)

如果情况如下:

      /--a--b--c  myBranch [local branch]
     /
----x <- [closest common ancestor]
     \
      \--e--f  origin/myBranch [tracked remote]
  • git status将显示消息myBranch..origin/myBranch [ahead 3, behind 2] - ahead 3表示您的本地分支在最近的共同祖先之前提交3次,behind 2表示远程分支是2次提交最近的共同祖先
  • git log origin/myBranch..myBranch将显示有关提交a-b-c的日志 - 它将显示提交的日志,范围从两个分支的共同祖先到myBranch
  • git log myBranch..origin/myBranch将显示有关提交e-f的日志 - 它将显示提交的日志,范围从两个分支的共同祖先到origin/myBranch

您可以为这些命令添加任何您喜欢的选项,例如:git log --oneline --decorate origin/myBranch..myBranch

答案 2 :(得分:0)

git status表示当前分支在跟踪分支后面的距离。您可以在脚本中运行它并解析输出。可能还有一个管道命令可以更直接地为您提供信息。

答案 3 :(得分:0)

您可以使用'git fetch'命令获取最新的更改信息,然后如果您在跟踪的分支上执行“ git status”,它应该会显示给您未推送到服务器的提交数或当前分支落后的程度。

使用 fetch 命令不会应用本地分支中的更改,为此,您必须使用'git merge origin / branch_name'进行合并。