我喜欢git索引允许的细粒度提交,即在最终提交之前通过git add
暂存单个文件甚至是个人文件。不幸的是,有时在花了一些时间进行特定的提交之后,肌肉记忆才会开始,以便我git commit -a -m "msg"
。然后我要么忍受它,要么跳过一些reset
或--amend
箍。
我有没有办法(理想情况下,全局)配置Git,这样如果我发出git commit -a
,它会被截获?也许是一个脚本要我确认我是否真的要全部投入?我已经考虑将提交操作委托给包装器脚本(例如,“gitcommit”),但是不要认为它会工作得很好,因为它不会阻止我做git commit -a -m "msg"
,这是问题所在。第一名。
答案 0 :(得分:4)
类似的东西(未经测试)
的.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 -u
加git commit
。