根据习惯,我会经常改变我的回购,并使用git commit -am 'my commit message'
有些时候我只想添加一些修改后的文件,因此我会发出准备git add
命令来精心设置我的暂存区域,并将准备提交分开从半生不熟的变化中改变。
然后,我会通过发出与我通常相同的git commit -am '...'
命令来指责整个事情。
当我使用git commit -a
开关时,是否有办法禁用-a
选项和/或发出警告?我想训练自己摆脱这种粗略的习惯......
答案 0 :(得分:3)
我不知道git config
setting会阻止/禁止git commit
的--all/-a
选项。
你可以考虑一下:
pre-commit
hook(此处为hooks--pre-commit.sample
):
git stash save -q --keep-index "possible commit am"
(-q
用于'安静')
那将从工作树中删除任何修改(除了已经添加到索引中的那些)
post-commit
hook
if [[ "$(git stash list|| grep "stash@{0}" | grep "possible commit am")" != "" ]]; then
git stash pop -q
fi
这应该允许您键入git commit -[a]m "a commit message"
而不提交所有内容
如果你想跳过一次提交的钩子:
git commit --no-verify -m "a commit message"
答案 1 :(得分:3)
创建一个名为git
的包装器脚本,它将捕获错误的命令并将好的命令转发到真实的git
。将它放在$PATH
:
#!/bin/bash
for ARG in "${@}"; do
if [ "${ARG}" = "-am" ]; then
echo "Hey! Don’t do that!" 1>&2
exit 1
fi
done
exec /usr/bin/git "${@}"
几乎所有的git命令都可以正常工作:
$ git pull
remote: Counting objects: 1183, done.
remote: Compressing objects: 100% (728/728), done.
remote: Total 1183 (delta 771), reused 632 (delta 455)
Receiving objects: 100% (1183/1183), 1.12 MiB | 1.46 MiB/s, done.
...
但是那些你不想工作的人不会:
$ git commit -am "foo"
Hey! Don’t do that!
答案 2 :(得分:1)
这是针对鱼壳特有的,所以对每个人都没有用......但可能会对某些人有用!
function git
if string match 'commit' $argv[1] > /dev/null
set has_am 0
for arg in $argv
if string match -r -- '^-am.*' $arg > /dev/null
set has_am 1
end
end
if test $has_am -eq 1
echo -e "Commit All detected.\nDon't do this!"
else
command git $argv
end
else
command git $argv
end
end