跟踪git日志
我正在阅读一个旧的部署脚本,遇到了一行让我困惑的bash 声明如下跟踪git日志,git,bash,centos,Git,Bash,Centos,我正在阅读一个旧的部署脚本,遇到了一行让我困惑的bash 声明如下 if [[ \\$(git log @{u}.. 2> /dev/null | tail -n1) != '' ]]; then echo 'LOCAL BRANCH HAS UNCOMMITTED CHANGES.'; fi; 据我所知,我们正在运行git日志并检查输出是否为空字符串。我可能会很生气,但这就是我问的原因 git log @{u}.. 2> /dev/null | tail -n1 以上
if [[ \\$(git log @{u}.. 2> /dev/null | tail -n1) != '' ]];
then echo 'LOCAL BRANCH HAS UNCOMMITTED CHANGES.';
fi;
据我所知,我们正在运行git日志并检查输出是否为空字符串。我可能会很生气,但这就是我问的原因
git log @{u}.. 2> /dev/null | tail -n1
以上是令人困惑的部分。如果我在本地回购上运行这个,我会得到一个空字符串作为返回值。我不明白为什么。我不明白那是什么。。2> /dev/null表示。据我所知,
2>/dev/null
正在将可能的错误重定向到位于/dev/null
的文件中。但这条线的其他部分在做什么?您提到的@{u}
将stderr(POSIX定义为文件描述符2)重定向到/dev/null
,这是忽略错误消息的常见技巧
@{u}
是上游分支的快捷方式,请参阅
git log@{u}..
与git log@{u}..HEAD
相同。双点指定提交的范围,例如HEAD
中的所有提交减去@{u}
中的所有提交
因此,
HEAD
(本地分支)减去上游分支将为您提供您尚未推动的本地承诺。非常好,谢谢!请注意,这里喊出的“未提交”一词是完全错误的:这些是已提交的更改。本地Git认为它们没有被提交到相应的上游分支@{u}
。