【问题标题】:How to invoke `git show` only for the latest fetched branches?如何仅为最新获取的分支调用`git show`?
【发布时间】:2017-06-18 03:18:05
【问题描述】:

我有数百个分支的存储库,我只想为最近获取或更新的分支运行git show,如git fetch 所示,例如

$ git fetch tester
From repo:Foo/Bar
 * [new branch]      Foo -> origin/Foo
   a7e70a8..a9d7805  Bar -> origin/Bar
 + b673629...293dc64 Baz -> origin/Baz (forced update)
 + 345850e...b3646a3 Qux -> origin/Qux (forced update)

所以我想以如下命令结束:

git show origin/Foo origin/Bar origin/Baz origin/Qux

这将向我展示这些最近获取的分支与其父提交之间的差异。

如何做到这一点?


我尝试过git show FETCH_HEAD,但它只显示一个分支以及 refname 'FETCH_HEAD' 不明确的警告。

而git show $(git branch -r --sort=authordate | head) 向我展示了更老的分支,其次该命令与-> 分行,因此它也不起作用。

【问题讨论】:

  • 旁注:git show origin/Foo 没有显示origin/Foo 和master 之间的区别(除了一种特殊情况)。它显示了origin/Foo 与其父提交之间的区别。如果只有一个origin/Foo 的父提交,并且该父提交也是master 命名的提交,那么您会得到一种特殊情况。 (并且,git show <c1> <c2> <c3> 按通常的 diff-commit-against-its-parent(s) 顺序显示每个命名的提交。)
  • @torek 更正了它显示了父提交之间的差异。

标签: git git-fetch git-show


【解决方案1】:

这是涉及解析git 输出的解决方案,例如

git fetch tester 2>&1 | grep -o "origin/\S\+" | xargs git show

将origin 替换为远程主机的名称。

您可以先使用--dry-run 参数对其进行测试(在获取分支之前),例如

git fetch tester --dry-run 2>&1 | grep -o "origin/\S\+"

【讨论】:

    【解决方案2】:

    您可以通过for-each-ref获取最近更新的分支

    git for-each-ref --sort=-committerdate refs/remotes/origin
    

    使用--format=%(objectname) 获取这些分支的负责人。这样就得到了最近更新的五个分支,

    git for-each-ref --sort=-committerdate --format="%(objectname)" refs/remotes/origin | head -5 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-06-22
      • 2012-11-04
      • 1970-01-01
      • 1970-01-01
      • 2010-12-25
      • 2019-05-30
      • 2013-03-21
      • 2010-11-27
      相关资源
      最近更新 更多