是否有一种方法可以使用像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命令?


当前回答

一切都很简单

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

git status -u

其他回答

如果您只是想删除未跟踪的文件,请执行以下操作:

git clean -df

如果您还想包含特别忽略的文件,则在此基础上添加x。我一整天都在使用git clean -dfx。

您可以通过编写一个名为git-whatever的脚本并将其放在您的路径中来创建自定义git。

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

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

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

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

我检查的所有以前的答案也会列出要提交的文件。 列表中还没有的文件是一个简单的解决方案 回购和不受。gitignore。

git status --porcelain | awk '/^\?\?/ { print $2; }'

or

git status --porcelain | grep -v '\?\?'

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

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

git clean -xdn

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

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

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