通过给定的 Git 远程跟踪分支名称,如何找到它所跟踪的本地分支?

6 浏览
0 Comments

通过给定的 Git 远程跟踪分支名称,如何找到它所跟踪的本地分支?

如何通过Git远程跟踪分支的名称(例如upstream/develop)找到是否有任何本地分支与其关联?

如果可能的话,我希望找到一个不依赖于shell脚本的解决方案,并且在Windows上也能正常运行。

0
0 Comments

问题的原因是需要根据给定的Git远程跟踪分支名称找到对应的本地分支。

解决方法是使用以下命令来过滤简单的"git branch"命令的详细输出:

git branch -vv | grep upstream/develop

作者的使用情况是基于对分支的部分名称("po/glos.."),找到独立上游分支使用的远程和分支。根据你的示例,"git branch -rl | grep po/glos"命令是通用的解决方案来找到它。

0
0 Comments

根据这个答案(分支枚举)和这个答案(检索上游分支),可以遍历本地分支并检查是否有所需的跟踪远程分支:

git for-each-ref --shell \
  --format='test %(upstream:short) = "upstream/develop" && echo %(refname:short)' \
  refs/heads/ | sh

为什么使用`--shell`和`| sh`?

根据[man页面](https://git-scm.com/docs/git-for-each-ref#Documentation/git-for-each-ref.txt---shell),`--shell`只对直接评估进行适当的shell引用,但不会自己调用shell。`--perl`、`--python`和`--tcl`也是如此。

感谢反馈,现在对我来说更清楚了^^以前从未使用过这个选项

0
0 Comments

从以上内容中可以看出,问题是如何通过给定的Git远程跟踪分支的名称找到相应的本地分支,并给出了解决方法。解决方法是使用Git命令`git for-each-ref`结合`--format`选项和条件语句来实现。

具体的解决方法如下所示:

1. 首先,可以使用以下命令创建一个全局别名`who-tracks`:

git config --global alias.who-tracks '!f() { git for-each-ref --format="%(if:equals=upstream/$1)%(upstream:short)%(then)%(refname:short)%(end)" refs/heads | sort -u; }; f'

这个别名会调用`git for-each-ref`命令,使用`--format`选项来定义输出格式。在格式字符串中,使用条件语句来判断远程跟踪分支的名称是否与给定的参数相等,如果相等,则输出远程分支的简短名称,否则输出本地分支的简短名称。最后,使用`sort -u`命令对结果进行排序和去重。

2. 当需要查找某个远程跟踪分支对应的本地分支时,可以使用以下命令:

git who-tracks develop

其中,`develop`是要查找的远程跟踪分支的名称。

以上就是通过给定的Git远程跟踪分支的名称找到相应的本地分支的解决方法。通过定义一个别名并调用相应的Git命令,可以方便地实现这个功能。

0