Git - 段階的でない変更を含む段階的ファイルを探す

Git - 段階的でない変更を含む段階的ファイルを探す

ステージングされたファイルにステージングされていない変更があるかどうかを検出し、コミット前のフックに追加したいと思います。

たとえば、出力が次のようになったときに、README.mdに未段階の変更があることを検出できるはずです。

❯ git status

Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
    modified:   README.md

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
    modified:   README.md
    modified:   foo.txt

私が見つけることができる最善の解決策は、準備されたファイルと準備されていないファイルのリストをファイルに書き込んでから使用することです。comm

git diff --name-only > /tmp/unstaged.txt
git diff --name-only --staged > /tmp/staged.txt
comm /tmp/unstaged.txt /tmp/staged.txt

ベストアンサー1

M短い状態を使用すると、ステージングコンテンツは最初の列に表示され、ステージングされていないコンテンツは2番目の列に表示されますM。したがって、段階的および非段階的な変更を含むファイルは、次のように検出できます。

git status -s | awk '/MM / { print $2 }'

おすすめ記事