如果我在手动添加文件之前,我可以让git拒绝全部提交吗?

时间:2015-08-31 13:36:16

标签: git version-control git-commit git-add

大多数时候,我提交git commit -am,因为我对项目所做的一切都属于我正在进行的提交。

只有在某些情况下,我不想提交一些更改,因此我使用git add -p来仅展示我真正想要的内容。麻烦的是,我已经习惯于输入git commit -am,我通常最终会这样做。然后我得到了一些我不想要的东西,并且不得不费力地回到HEAD^,并重新做add -p

显然,当手动添加某些更改时,commit -am不再有意义。有没有办法阻止git接受这​​种情况下的选项(或-am的一些替代方案,这同样方便)?

2 个答案:

答案 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
而是(注意领先的空间)。

您可能需要根据您的环境进行调整。