Git:如何防止提交仅为调试目的而修改的文件?

Git:如何防止提交仅为调试目的而修改的文件?,git,perforce,Git,Perforce,很多时候,我喜欢修改一些代码行以简化调试,但实际上我并不想提交它们。例如,我会通过注释掉一些代码行来禁用一些恼人的功能(比如广告),或者我会将日志级别和过滤器设置为我所关心的级别,或者我会强制一个条件为true,这样我想要运行的代码块实际上会一直运行 在Perforce中,我会为这些文件创建一个“变更列表”,并将其标记为“不提交!”。这在Git中的等价物是什么?分支不起作用,因为这些只进行调试的修改需要与我当前正在进行的其他更改一起存在。查找--Aspect unchanged选项。有一篇博客文

很多时候,我喜欢修改一些代码行以简化调试,但实际上我并不想提交它们。例如,我会通过注释掉一些代码行来禁用一些恼人的功能(比如广告),或者我会将日志级别和过滤器设置为我所关心的级别,或者我会强制一个条件为true,这样我想要运行的代码块实际上会一直运行


在Perforce中,我会为这些文件创建一个“变更列表”,并将其标记为“不提交!”。这在Git中的等价物是什么?分支不起作用,因为这些只进行调试的修改需要与我当前正在进行的其他更改一起存在。

查找--Aspect unchanged选项。有一篇博客文章解释得很好。还提到了以后查找此类被忽略的文件。

我通常只需将调试代码放入自己的提交中,并在以后还原该提交。一个更复杂的解决方案是从
master
生成一个中间分支,称之为
debug
。在
debug
分支中进行所有调试更改,然后使功能分支脱离
debug
。当您准备删除调试更改时,只需将功能分支重新设置到
master

您实际上不想忽略这些文件,而是要忽略这些更改

我在这里看到两种解决方案:

  • 恢复头部
  • 我在这种情况下使用的命令是:

    git checkout -- file ...
    
    使用为调试目的而修改的所有文件

    这将还原自
    头起的文件。
    然后您可以安全地使您的
    git提交-a
    或其他任何内容

  • 告诉git询问您要提交哪些更改(每个文件)

    git add-p


  • 但是您仍然需要删除调试代码。

    谢谢大家的回答。最后,我在git中编写了一个预提交钩子,用于检查每个文件中的字符串“dont commit”(以及其他变体)。如果是这样,那么提交失败,我必须在提交之前编辑这些行。这是因为调试代码应该按行处理,而不是按文件处理,因为有些文件既有调试更改,也有要提交的实际更改。(我以前使用perforce的解决方案没有解决这个问题)。

    其中一个解决方案不是通用的,但可能适合某些工作流场景,即应用Git的预提交过滤器(,)。简言之,它只是一个预处理工具,在实际提交之前,将对所有提交的文件进行调用。您可以使用此机制去除某些模式,如
    /
    或您喜欢的任何模式。缺点是,当重置为提交或甚至拉/合并(我没有检查)时,这些调试行可能会消失。

    第二个链接有很好且简单的解释