如何抑制“更改未提交”的提示?

4

如何在提交时抑制“Changes not staged for commit”的输出?注意:

  • 我知道可以使用> /dev/null,但我希望不要抑制其他内容。
  • 我不是在谈论提交消息 - 我是在谈论它在终端上打印的内容。

为什么要费心呢?这只是有关更改文件信息但未包含在提交中的信息。当您准备从给定的更改工作树创建一系列提交时,它非常有用。 - user3159253
1
请查看REPO/.git/hooks/prepare-commit-msg.sample,其中有一个示例,展示了如何注释掉可能需要调整的“冲突”部分。 - Andrew C
1
这很令人困惑。那个输出是什么?你能给我们一个例子吗?除了默认提交消息中被注释掉的那个(如果您通过编辑器输入提交消息)...我唯一能想到的是在git status中,这是完全不同的问题。 - bperson
如果您没有使用编辑器,那么提交后的输出将类似于[master 436246b] test 1 file changed, 1 insertion(+),因此不会包含“未提交的更改”;) - bperson
1
@ddr2:抱歉有些混乱,我遇到这个问题是在尝试提交没有添加文件的情况下(这是脚本的一部分,显然不是我手动操作的)。 - user541686
显示剩余6条评论
1个回答

1

经过在 git.git代码库中的一番探索,我很遗憾地告诉你,你需要设计一种方法来忽略脚本中的这些行。

在提交期间,如果你不使用--allow-empty,git会通过那段代码

if (!commitable && whence != FROM_MERGE && !allow_empty &&
    !(amend && is_a_merge(current_head))) {
    s->display_comment_prefix = old_display_comment_prefix;
    run_status(stdout, index_file, prefix, 0, s);
    ...
    return 0;
}

而且,run_status执行以下操作:
switch (status_format) {
    case STATUS_FORMAT_SHORT:
        wt_shortstatus_print(s);
        break;
    case STATUS_FORMAT_PORCELAIN:
        wt_porcelain_print(s);
        break;
    case STATUS_FORMAT_UNSPECIFIED:
        die("BUG: finalize_deferred_config() should have been called");
        break;
    case STATUS_FORMAT_NONE:
    case STATUS_FORMAT_LONG:
        wt_status_print(s);
        break;
    }
}

STATUS_FORMAT_PORCELAIN(使用--porcelain)和STATUS_FORMAT_SHORTgit config status.short true)将产生相同的精简输出:

 M bla.txt

使用STATUS_FORMAT_LONG(以及STATUS_FORMAT_NONE,不确定为什么?)将会产生通常的输出:

Changes not staged for commit:
    modified:   bla.txt

话虽如此,我们不必绝望,这是关于软件的讨论,总有一种方法可以解决问题(尽管我仍然需要完全测试一下;))

您可以使用--allow-empty通过该代码分支并创建一个空提交。 然后,您将其链接到一个post-commit挂钩,该挂钩检查最新提交是否为空,如果是,则该挂钩运行git reset --hard HEAD~1,然后您就可以开始了?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接