拦截“git commit -a(m)”

时间:2010-11-29 23:34:08

标签: git

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

我有没有办法(理想情况下,全局)配置Git,这样如果我发出git commit -a,它会被截获?也许是一个脚本要我确认我是否真的要全部投入?我已经考虑将提交操作委托给包装器脚本(例如,“gitcommit”),但是不要认为它会工作得很好,因为它不会阻止我做git commit -a -m "msg",这是问题所在。第一名。

2 个答案:

答案 0 :(得分:4)

尝试pre-commit hooks

类似的东西(未经测试)

的.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

您可以使用git diff-index --cached HEAD | wc -l找出要提交的文件数。但我想我会留给自己。

答案 1 :(得分:1)

一种方法是使git成为运行您创建的脚本的别名,该脚本会查看命令行参数,并告诉您是否键入commit后跟-a命令行。

就个人而言,我从不使用commit -a而是始终使用git add -ugit commit