gpt4 book ai didi

git - 如何检查当前分支中是否没有要提交的内容?

转载 作者:IT王子 更新时间:2023-10-29 01:17:38 26 4
gpt4 key购买 nike

目标是获得可以在 shell 命令中评估的明确状态。

我试过 git status 但它总是返回 0,即使有项目要提交也是如此。

git status
echo $? #this is always 0

我有一个想法,但我认为这是一个相当糟糕的想法。

if [ git status | grep -i -c "[a-z]"> 2 ];
then
code for change...
else
code for nothing change...
fi

还有其他办法吗?


更新以下解决方案,请参阅 Mark Longair 的帖子

我试过了,但它导致了一个问题。

if [ -z $(git status --porcelain) ];
then
echo "IT IS CLEAN"
else
echo "PLEASE COMMIT YOUR CHANGE FIRST!!!"
echo git status
fi

我收到以下错误 [: ??: expected binary operator

现在,我正在看那个人并尝试 git diff。

===================我希望代码,希望更好的答案=================== ===

#if [ `git status | grep -i -c "$"` -lt 3 ];
# change to below code,although the above code is simple, but I think it is not strict logical
if [ `git diff --cached --exit-code HEAD^ > /dev/null && (git ls-files --other --exclude-standard --directory | grep -c -v '/$')` ];
then
echo "PLEASE COMMIT YOUR CHANGE FIRST!!!"
exit 1

else
exit 0
fi

最佳答案

测试 git status --porcelain 的输出是否为空的替代方法是分别测试您关心的每个条件。人们可能并不总是关心,例如,git status 的输出中是否有未跟踪的文件。

比如查看本地有没有未暂存的变化,可以查看返回码:

git diff --exit-code

要检查是否有任何暂存但未提交的更改,您可以使用以下返回码:

git diff --cached --exit-code

最后,如果您想知道您的工作树中是否有未被忽略的未跟踪文件,您可以测试以下命令的输出是否为空:

git ls-files --other --exclude-standard --directory

更新:您在下面询问是否可以更改该命令以排除输出中的目录。您可以通过添加 --no-empty-directory 来排除空目录,但要排除该输出中的所有目录,我认为您必须过滤输出,例如:

git ls-files --other --exclude-standard --directory | egrep -v '/$'

-vegrep 表示只输出不匹配模式的行,模式匹配任何以 /< 结尾的行.

关于git - 如何检查当前分支中是否没有要提交的内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5139290/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com