git:要求确认双“git add”?

gcb*_*gcb 0 git

有时,git add处理已经进行了暂存更改的文件可能会丢失我想要保留的历史记录。

当我错误地执行此操作时,有什么方法可以得到确认对话框或其他信号吗?

tor*_*rek 5

不是来自 Git 本身,不是。

不过,您可以直接停止使用git add,并运行您自己编写的程序。创建一个别名 ( git a) 或为其命名git-a并将其放入您的路径中,以便git a调用您的程序,该程序或多或少读作:

#! /bin/sh

# compute all-zero null hash ID (git rev-parse should have a flag for this!)
zeros=$(git hash-object --stdin </dev/null | sed 's/./0/g')

confirm=false
for arg do
    # if file is modified in staging area WRT HEAD commit, confirm
    headrev=$(git rev-parse "HEAD:$arg" 2>/dev/null || echo $zeros)
    indexrev=$(git rev-parse ":arg" 2>/dev/null || echo $zeros)
    if [ $headrev != $indexrev ]; then
        echo "warning: $arg is modified in index"
        confirm=true
    fi
done
if $confirm; then
    echo -n "add anyway? (y/n) "
    read yn
    case "$yn" in
        y|Y|yes|YES);;
        *) echo "not adding"; exit 1;;
    esac
fi
git add "$@"
Run Code Online (Sandbox Code Playgroud)

该脚本完全未经测试,因此请先测试。请注意,这也是故意简单的:它不处理与 相同的标志参数,并且git add不会git add .正确处理;为此你必须更加努力地工作。