1. ホーム
  2. ギット

[解決済み】現在のブランチにコミットするものがないかを確認する方法は?

2022-04-18 11:01:54

質問

目標は、シェルコマンドで評価できる曖昧さのないステータスを得ることである。

試してみた 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

次のようなエラーが発生します。 [: ??: binary operator expected

今、manを見て、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

解決方法は?

の出力が、「not」であるかどうかをテストする代替案があります。 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 '/$'

-v から egrep は、パターンにマッチしない行だけを出力することを意味し、パターンは / .