大多数时候,我提交git commit -am
,因为我对项目所做的一切都属于我正在进行的提交。
只有在某些情况下,我不想提交一些更改,因此我使用git add -p
来仅展示我真正想要的内容。麻烦的是,我已经习惯于输入git commit -am
,我通常最终会这样做。然后我得到了一些我不想要的东西,并且不得不费力地回到HEAD^
,并重新做add -p
。
显然,当手动添加某些更改时,commit -am
不再有意义。有没有办法阻止git接受这种情况下的选项(或-am
的一些替代方案,这同样方便)?
答案 0 :(得分:0)
更容易,更快,更诱人。像git commit -am
一样诱人,你应该训练自己远离它。它真的意味着非常简单(例如单文件)提交。使用暂存区域对您有利:在拍摄快照之前,请将时间花费到compose the shot。
如果这个警告还不够,你需要一些帮助来避免git commit -am
......不幸的是,Git API本身并没有提供一种“禁止”其子集的简单方法命令。一个不太强大的方法,但主要是诀窍,是为git
编写一个简单的shell包装函数,注意命令行参数commit
和-am
,以及在使用这些参数时采取措施(与this other answer中的策略相同。):
# Git wrapper forbidding 'git commit -am'
git() {
if [ "$1" = "commit" -a "$2" = "-am" ]; then
printf "'git commit -am' is currently disabled by your Git wrapper.\n";
else
command git "$@";
fi;
}
根据您的习惯,您当然可以优化此包装以使其更加健壮。
答案 1 :(得分:0)
您可以创建一个脚本文件git-cm
,并将其放入PATH
#!/bin/sh
DIRTY=$(git status -s| grep -e "^[A-Z]")
if [ ! "$DIRTY" ]; then
git commit "$@";
exit 0;
else
echo "Rejected, files already manually added";
exit 1;
fi
当你想提交
时运行它git-cm -am "some message"
如果您已经手动添加了文件,脚本将拒绝提交并中止操作。
这是因为在这种情况下,git status -s
会产生一条以例如
M file/Ive/just.added`
其中没有手动添加它的
M file/Ive/just.added
而是(注意领先的空间)。
您可能需要根据您的环境进行调整。