2013-03-22 86 views
2

需要在脚本中执行此操作。谢谢。Git:如何检查本地分支是否有被跟踪远程没有的任何提交?

+0

可能是[this]的副本(http://stackoverflow.com/questions/1800783/compare-local-git-branch-with-remote-branch)。 – ajp15243 2013-03-22 01:56:12

+0

['git-wtf'](http://git-wt-commit.rubyforge.org/git-wtf)是一个很酷的方便脚本,它已经做到了。它是用红宝石书写的。你可以尝试反向工程。 – Tuxdude 2013-03-22 02:02:46

回答

0

git status指示当前分支在被跟踪分支后面有多远。你可以在脚本中运行它并解析输出。也可能有一个管道命令,可以更直接地为您提供信息。

0

您可以使用“混帐取”命令,然后,如果你做一个跟踪分支“git的状态”,它应该告诉你,不是推到了提交的数目拉最新的变化信息服务器或当前分支落后多远。

使用命令在你当地的分支机构将不适用的变化,对于这一点,你必须使用“git的合并产地/ branch_name”来合并。

1

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

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

这将需要被修改为在脚本中使用,并且有可能是做同样的事情管道命令,但我觉得它有用。

的关键是在过去的几年参数:

  • --all包括refs/所有裁判 - 你可能不希望这样,如果你只希望当前分支的提交。
  • --branches包括refs/heads中的所有参考文献 - 保留当前值或明确指定分支来限制提交列表。
  • --not --remotes包含魔法 - 确保列出的任何提交都不在refs/remotes中。

编辑>它看起来像git rev-list ...管道命令也有类似的争论,但我没有测试它知道,如果它的工作原理是相同的。管道命令被推荐用于编写脚本,所以请看看它 - man-page以供参考。

希望这会有所帮助。

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 - 它将显示从两个分支的公共祖先一直到012的提交日志
  • git log myBranch..origin/myBranch将显示日志有关承诺e-f - 它会显示在日志中提交不等的两个分支的共同祖先高达origin/myBranch

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

相关问题