是否有一种方法可以使用像git ls-files这样的命令来只显示未跟踪的文件?

我这样问的原因是因为我使用以下命令来处理所有已删除的文件:

git ls-files -d | xargs git rm

我想要一些类似的未跟踪文件:

git some-command --some-options | xargs git add

我能够找到-o选项git ls-files,但这不是我想要的,因为它还显示被忽略的文件。我还想出了下面这个又长又丑的命令:

git status --porcelain | grep '^??' | cut -c4- | xargs git add

看来这里还有更好的命令可以用。如果没有,我如何创建自定义git命令?


当前回答

被接受的答案会在有空格的文件名上崩溃。我在这一点上不确定如何更新alias命令,所以我将把改进的版本放在这里:

git ls-files -z -o --exclude-standard | xargs -0 git add

其他回答

我知道这是一个老问题,但在列出未跟踪的文件方面,我想我会添加另一个也列出了未跟踪的文件夹:

你可以使用git clean操作-n(演练)来显示它将删除哪些文件(包括.gitignore文件):

git clean -xdn

这样做的好处是可以显示未被跟踪的所有文件和文件夹。参数:

x -显示所有未跟踪的文件(包括被git忽略的文件和其他文件,如构建输出等…) 显示未跟踪的目录 N -最重要的是!-干式运行,即实际上不删除任何东西,只是使用清洁机制显示结果。

这样做可能有点不安全万一你忘了-n。所以我通常在git配置中使用别名。

git add -A -n会做你想做的。-A将所有未跟踪和修改的文件添加到repo, -n使其成为一个演练,其中添加不执行,但给出的状态输出列出了将被添加的每个文件。

被接受的答案会在有空格的文件名上崩溃。我在这一点上不确定如何更新alias命令,所以我将把改进的版本放在这里:

git ls-files -z -o --exclude-standard | xargs -0 git add

一切都很简单

要获得所有未跟踪文件的列表,使用命令git status和选项-u(——untracked-files)

git status -u

要列出未跟踪的文件,请尝试:

git ls-files --others --exclude-standard

如果你需要将输出管道到xargs,明智的做法是使用git ls-files -z和xargs -0来注意空格:

git ls-files -z -o --exclude-standard | xargs -0 git add

添加未跟踪文件的好别名:

au = !git add $(git ls-files -o --exclude-standard)

编辑:参考:git-ls-files