如果我之前有手动添加的文件,我可以让 git 拒绝全部提交吗?
Can I make git reject an all-commit if I have before manually added files?
大多数时候,我提交 git commit -am
,因为我对项目所做的一切都属于我正在处理的提交。
只是有时候,有些更改我不想提交,所以我使用 git add -p
只展示我真正想要的。麻烦的是,我已经习惯了输入 git commit -am
以至于我通常最终还是会这样做。然后我提交了我不想要的东西,不得不费力地回到 HEAD^
,并重新做 add -p
。
显然,如果已经手动添加了一些更改,commit -am
就不再有意义了。在这种情况下,有没有办法阻止 git 接受该选项(或者 -am
的某种替代方法同样方便)?
更简单、更快捷、更诱人。 尽管 git commit -am
可能很诱人,但您应该训练自己远离它。它真的意味着非常简单的(例如单文件)提交。充分利用暂存区:在拍摄快照之前花时间 compose the shot。
如果这个警告还不够,您需要一点帮助来避免 git commit -am
...嗯,不幸的是,Git API 本身并没有提供"forbidding" 其命令子集的简单方法。一种不是很健壮但主要有用的方法是为 git
编写一个简单的 shell 包装函数,它会留意命令行参数 commit
和 -am
,并在使用这些参数时采取措施(与 this other answer 中的策略相同):
# Git wrapper forbidding 'git commit -am'
git() {
if [ "" = "commit" -a "" = "-am" ]; then
printf "'git commit -am' is currently disabled by your Git wrapper.\n";
else
command git "$@";
fi;
}
根据您的习惯,您当然可以优化此包装器以使其更健壮。
您可以创建一个脚本文件,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
相反(注意前导 space)。
您可能需要根据您的环境进行调整。
大多数时候,我提交 git commit -am
,因为我对项目所做的一切都属于我正在处理的提交。
只是有时候,有些更改我不想提交,所以我使用 git add -p
只展示我真正想要的。麻烦的是,我已经习惯了输入 git commit -am
以至于我通常最终还是会这样做。然后我提交了我不想要的东西,不得不费力地回到 HEAD^
,并重新做 add -p
。
显然,如果已经手动添加了一些更改,commit -am
就不再有意义了。在这种情况下,有没有办法阻止 git 接受该选项(或者 -am
的某种替代方法同样方便)?
更简单、更快捷、更诱人。 尽管 git commit -am
可能很诱人,但您应该训练自己远离它。它真的意味着非常简单的(例如单文件)提交。充分利用暂存区:在拍摄快照之前花时间 compose the shot。
如果这个警告还不够,您需要一点帮助来避免 git commit -am
...嗯,不幸的是,Git API 本身并没有提供"forbidding" 其命令子集的简单方法。一种不是很健壮但主要有用的方法是为 git
编写一个简单的 shell 包装函数,它会留意命令行参数 commit
和 -am
,并在使用这些参数时采取措施(与 this other answer 中的策略相同):
# Git wrapper forbidding 'git commit -am'
git() {
if [ "" = "commit" -a "" = "-am" ]; then
printf "'git commit -am' is currently disabled by your Git wrapper.\n";
else
command git "$@";
fi;
}
根据您的习惯,您当然可以优化此包装器以使其更健壮。
您可以创建一个脚本文件,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
相反(注意前导 space)。
您可能需要根据您的环境进行调整。