对于修改暂存文件的预提交挂钩,我需要弄清楚在运行挂钩后必须暂存的内容。
预提交钩子在应该提交的文件上应用了一些漂亮的打印。该钩子执行以下任务:
- 用空格替换制表符
- 删除行尾的尾随空格
- 删除双空行*)
- 如果缺少,请在文件末尾添加一个空行*)
标有*)的操作是导致下述问题的操作。
完成这些之后,钩子将修改后的文件添加到索引中,使用git add $filename
. 这样,整个文件被暂存,我不再能够只提交修改文件的一小部分(即大块)。
当然,我可以git add --no-verify
绕过钩子,但是在使用git gui
. 另外,我希望在文件的分段行上应用漂亮的打印,所以绕过钩子不是我的目标。
有没有办法在应用漂亮打印后找出必须添加到索引中的内容,以便我可以在运行钩子后暂存正确的内容,而不是暂存整个文件?
编辑 1:
虽然David Brigada提供的答案看起来很有希望,但它不起作用:保持分阶段的更改完好无损(这是好的部分),但是(至少在 msysgit 上)它将所有更改放入存储中(不仅是未分阶段那些)。这会在将存储弹出回 WC 时导致合并冲突,因为暂存行可能会被修改。git stash --keep-index
编辑 2:David
的更新答案也没有成功,因为 git 拒绝将 stash 合并到一个脏 WC 中。
编辑 3:来自larsks
的回答指出我使用. 乍一看,这似乎是正确的,但我发现签入的版本是通过过滤器运行的,而 WC 与签入的版本不同,这很令人困惑。至少,这是我的经验,并得到Git Book中以下评论的支持:.gitattributes
如果您提交这些更改并再次签出文件,您会看到正确替换的关键字
我必须删除该文件,然后再次检查它以查看过滤器应用的更改?没门!还有更多提示吗?