拦截“git commit -a(m)”

Jee*_*eet 2 git

我喜欢 git 索引允许的细粒度提交,即单个文件的暂存,甚至git add在最终提交之前通过。不幸的是,有时在花费一些时间进行特定提交后,肌肉记忆开始起作用,因此我git commit -a -m "msg". 然后我要么不得不忍受它,要么跳过一些reset--amend箍。

有没有办法让我(理想情况下,全局)配置 Git,以便如果我发出 a git commit -a,它会被拦截?也许一个脚本要求我确认我是否真的想提交所有内容?我曾考虑将提交操作委托给包装器脚本(例如,“gitcommit”),但认为这不会很好地工作,因为它不会阻止我执行 a git commit -a -m "msg",这首先是问题所在。

J-1*_*DiZ 5

尝试预提交钩子

像这样(未测试)

.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。但我想我会把这个留给你自己。