我喜欢 git 索引允许的细粒度提交,即单个文件的暂存,甚至git add在最终提交之前通过。不幸的是,有时在花费一些时间进行特定提交后,肌肉记忆开始起作用,因此我git commit -a -m "msg". 然后我要么不得不忍受它,要么跳过一些reset或--amend箍。
有没有办法让我(理想情况下,全局)配置 Git,以便如果我发出 a git commit -a,它会被拦截?也许一个脚本要求我确认我是否真的想提交所有内容?我曾考虑将提交操作委托给包装器脚本(例如,“gitcommit”),但认为这不会很好地工作,因为它不会阻止我执行 a git commit -a -m "msg",这首先是问题所在。
尝试预提交钩子:
像这样(未测试)
.git/钩子/预提交
#!/bin/sh
git diff-files --quiet # check if the working directory have non-staged files
DIRTY_WORKING=$?
if [ ! $DIRTY_WORKING ] ; then # check if we are committing all files
# list all files to be committed
git diff-index --name-status --cached HEAD
echo "Are you sure? (type YES to continue)"
read VALUE
[ "x$VALUE" != "xYES" ]
exit $?
fi
exit 0
Run Code Online (Sandbox Code Playgroud)
您可以使用 找出要提交的文件数 git diff-index --cached HEAD | wc -l。但我想我会把这个留给你自己。