ステージングされたファイルにステージングされていない変更があるかどうかを検出し、コミット前のフックに追加したいと思います。
たとえば、出力が次のようになったときに、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 }'