[解決済み】現在のブランチにコミットするものがないかを確認する方法は?
質問
目標は、シェルコマンドで評価できる曖昧さのないステータスを得ることである。
試してみた
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
は、パターンにマッチしない行だけを出力することを意味し、パターンは
/
.
関連
-
[解決済み] GitBash | origin master - rejected (fetch first) | GitHub リポジトリにファイルがない。
-
[解決済み] Git で直近のローカルコミットを取り消すには?
-
[解決済み] Gitブランチをローカルやリモートで削除するには?
-
[解決済み] リモートのGitブランチをチェックアウトするには?
-
[解決済み] 現在のGit作業ツリーからローカル(未追跡)ファイルを削除する方法
-
[解決済み] 新しいローカルブランチをリモートの Git リポジトリにプッシュし、それを追跡するにはどうすればよいのでしょうか?
-
[解決済み] Git のリモートブランチを作成する方法を教えてください。
-
[解決済み] Git で現在のブランチ名を取得するには?
-
[解決済み] Git で最新のコミットを新しいブランチに移動する
-
[解決済み】ローカルのGitブランチの名前を変更するには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Git:コミットに何も追加されていないが、未追跡のファイルが存在する
-
[解決済み】マージ後のコミットでGitエラー - fatal: マージ中に部分コミットができない
-
[解決済み】Git サブモジュール head 'reference is not a tree' エラー
-
[解決済み] [email protected] へのいくつかの参考文献のプッシュに失敗しました。
-
git revert 複数コミット
-
[解決済み] git stashを元に戻す
-
[解決済み] SourceTree error:1407742E:SSLルーチン:SSL23_GET_SERVER_HELLO:tlsv1警告プロトコルバージョン
-
[解決済み] git status に fatal: bad object HEAD と表示される。
-
[解決済み] リモートブランチにプッシュできない、ブランチに解決できない
-
[解決済み] シェルの実行に失敗してもJenkinsのビルドを失敗させないようにする