我有一个bash脚本,它接受一个分支名称(例如,“master”或“feature/foo”)或提交散列(例如“1234abcd”)的字符串。
我已经检查了存储库,所以我可以调用git。
确定字符串是分支名称还是提交哈希的最佳方法是什么?

#!/bin/bash
commit_or_branch="$1"
cd /path/to/my_repo
git fetch
if <is_branch $commit_or_branch>
then
    echo "it's a branch"
else
    echo "it's a commit"
fi

最佳答案

如果您想要一个健壮的机制来告诉相对名称(例如,sha1可能是命名分支后面的一个或多个提交),那么可以使用git name-rev来解决它。
示例:

$ git config remote.upstream.url
https://github.com/RobotLocomotion/drake.git

$ git log --oneline -n 5
7530a95 Merge pull request #5743 from soonho-tri/pr-reformat-mathematical_program
ebc8f25 Suppresses console output of speed_bump.obj genrule. (#5726)
d8b9a0b Merge pull request #5735 from david-german-tri/namespaces
79e10e8 Remove redundant 'symbolic::' prefix from mathematical_program code
b68b590 Clean up mathematical_program code by adding using std::*

$ git name-rev HEAD
HEAD master
$ git name-rev 79e10e8
79e10e8 master^2
$ git name-rev HEAD~20
HEAD~20 remotes/origin/issue/5646_return_binding~3

```
参考:Git Tips

09-25 20:26
查看更多