我希望检测暂存文件是否有未暂存的更改,并将其添加到预提交挂钩中。
例如,当输出是这样的时,我应该能够检测到 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
在第一列中,非暂存内容将显示M
在第二列中。因此,可以通过以下方式检测具有分阶段和非分阶段更改的文件
git status -s | awk '/MM / { print $2 }'