是否可以禁用"危险" git中的命令行选项?

时间:2014-06-19 22:10:33

标签: git git-config

根据习惯,我会经常改变我的回购,并使用git commit -am 'my commit message'

一次性添加/提交

有些时候我只想添加一些修改后的文件,因此我会发出准备git add命令来精心设置我的暂存区域,并将准备提交分开从半生不熟的变化中改变。

然后,我会通过发出与我通常相同的git commit -am '...'命令来指责整个事情。

当我使用git commit -a开关时,是否有办法禁用-a选项和/或发出警告?我想训练自己摆脱这种粗略的习惯......

3 个答案:

答案 0 :(得分:3)

我不知道git config setting会阻止/禁止git commit--all/-a选项。

你可以考虑一下:

-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