【问题标题】:Git: How to check whether a local branch has any commit that the tracked remote does not have?Git:如何检查本地分支是否有任何被跟踪远程没有的提交?
【发布时间】:2013-03-11 18:45:38
【问题描述】:

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

【问题讨论】:

  • 可能是this的副本。
  • git-wtf 是一个很酷的方便脚本,它已经做到了这一点。它是用红宝石写的。您可以尝试对其进行逆向工程。

标签: git


【解决方案1】:

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

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

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

关键在于最后几个参数:

  • --all 包括 refs/ 中的所有引用——如果你只想要当前分支的提交,你可能不想要这个。
  • --branches 包括 refs/heads 中的所有 refs -- 将其保留为当前或明确指定一个分支以限制提交列表。
  • --not --remotes 具有魔力——确保列出的所有提交都不在 refs/remotes 中。

编辑 > 看起来git rev-list ... 管道命令具有相似的参数,但我尚未对其进行测试以知道它是否工作相同。建议将管道命令用于脚本,因此请查看它——man-page 以供参考。

希望这会有所帮助。

【讨论】:

    【解决方案2】:

    如果情况是这样的:

          /--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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

        使用 fetch 命令不会将更改应用到本地分支,为此,您必须使用 'git merge origin/branch_name' 合并它。 p>

        【讨论】:

          猜你喜欢
          • 2014-06-09
          • 2021-10-27
          • 2018-11-27
          • 2010-09-27
          • 1970-01-01
          • 2013-04-30
          • 2018-08-26
          • 1970-01-01
          • 2013-11-15
          相关资源
          最近更新 更多