通过给定的 Git 远程跟踪分支名称,如何找到它所跟踪的本地分支?
根据这个答案(分支枚举)和这个答案(检索上游分支),可以遍历本地分支并检查是否有所需的跟踪远程分支:
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`也是如此。
感谢反馈,现在对我来说更清楚了^^以前从未使用过这个选项
从以上内容中可以看出,问题是如何通过给定的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命令,可以方便地实现这个功能。