使用git add添加特定列表修改的文件

时间:2017-10-15 21:19:09

标签: git unix

我想只添加修改过的文件。 我试过了:

 git status | grep "modified" | cut -d " " -f4 | git add

git status | grep "modified" | cut -d " " -f4 | xargs git add

但它不起作用。我该怎么用?

2 个答案:

答案 0 :(得分:2)

第一个赢了,因为你没有使用xargs。第二个不起作用,因为cut不起作用 - 查看输出。

命令git ls-files --modified为您提供了修改过的文件列表,每行一个。如果您的文件名中没有空格,只需使用:

git ls-files --modified | xargs git add

如果文件名中有空格,请使用-z-0选项(确保xargs的变体支持-0作为选项;它不是&# 39; t通用,但是GNU xargs)是标准的:

git ls-files --modified -z | xargs -0 git add

在使用没有标记的git status时,您需要确信文件名中没有空格,然后您可以使用:

git status | awk '/[[:space:]]modified:[[:space:]]/{print $2}' | xargs git add

此外,git status -s提供了更好,更容易解析的输出格式。您可以使用:

git status -s | sed -n '/^ M / s///p' | xargs git add

这适用于简单的情况(您已经在本地修改了文件,它还没有在索引中,并且这是唯一相关的更改)。您应该以简短格式阅读来自git status --help的spiel,以了解如何处理(许多)其他案例。

另请注意,git commit -a将提交所有已修改的文件。

  

我尝试:git ls-files -o | grep "tests/" | xargs -0 git add,但我得到xargs: argument line too long

-0的{​​{1}}选项需要'行'以null字节结尾。由于您省略了xargs选项,因此git命令无法生成这些命令。您可能忽略了这一点,因为您担心中间的-z(仅适用于以换行符结尾的行),但您的命令行必须从头到尾自我一致,或者使用换行符或使用空值作为文件名分隔符。幸运的是,grep有一个选项grep(适用于GNU和BSD --null; GNU也允许grep,但这意味着在BSD上有不同的东西来处理这些数据。因此,您应该尝试:

-z

或者,如果您不必担心文件名中的空格:

git ls-files -o -z | grep --null "tests/" | xargs -0 git add

答案 1 :(得分:1)

您只需使用git add -u即可。 It will stage only modified files