【问题标题】:Git add only all new files, not modified files [duplicate]Git只添加所有新文件,而不是修改过的文件[重复]
【发布时间】:2013-03-23 14:47:27
【问题描述】:

有没有办法只添加新文件而不用git添加修改过的文件?也就是说,使用 git status 列为未跟踪的文件。

当然除了单独添加每个文件。

在我的情况下,这并不是绝对必要的,对我来说真正的问题在这里得到了回答:How to make git-diff and git log ignore new and deleted files?

也就是说,不要在新文件上显示差异,所以我问这个问题更多,因为我在任何地方都找不到答案。

【问题讨论】:

  • 它的用例是什么?因为我看不出添加文件而不是在现有文件中添加相关更改有什么意义,而且如果更改与要提交的更改不相关,则可能需要根据其他一些标准手动挑选。
  • 我的工作流程是使用 diff 检查每个文件,然后将其添加到“让它不碍事”之类的。所以 git diff 现在只显示留给我检查的文件。所以我想添加新文件(假设或相信它们是“好的”)以让它们不碍事。

标签: git git-add


【解决方案1】:

也许

git add $(git ls-files -o --exclude-standard)

git ls-files 允许您列出由 git 管理的文件,并通过一些选项进行过滤。 -o 在这种情况下将其过滤为仅显示“其他(即未跟踪的文件)”

$(...) 语句将该命令的返回值作为参数传递给git add

【讨论】:

  • 您需要再次排除被忽略的文件,否则git add 会抱怨。例如。通过在git ls-files -o 调用中使用--exclude-standard 标志。
  • 好的,不知道。谢谢!
  • 如果我没记错的话,它只有会抱怨,告诉你它会忽略这些文件,如果你想真正添加它们,你必须使用@ 987654329@ 标志。还是很烦人。
  • 有效,但它会添加未跟踪的文件。
【解决方案2】:

您可以使用 git status 的短模式(请参阅man git-status(1)),它会给出以下输出:

没有短模式:

$ git status

...


# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#   README
#   application/libraries/Membres_exception.php
no changes added to commit (use "git add" and/or "git commit -a")

短模式:

$ git status -s
 M application/models/membre_model.php
?? README
?? application/libraries/Membres_exception.php

然后使用 grep、awk 和 xarg,您可以添加第一列为?? 的文件。

$ git status -s | grep '??' | awk '{ print $2 }' | xargs git add 

并看到它起作用了:

$ git status
# On branch new
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#   new file:   README
#   new file:   application/libraries/Membres_exception.php

【讨论】:

  • 好主意,虽然有一个问题:如果文件路径包含空格,awk '{ print $2 }' 将只抓取此类文件路径的第一部分。
  • 这个怎么样:git status -s | grep '??' | awk '{print substr($0, index($0, $2))}' | xargs git add
猜你喜欢
  • 2020-04-27
  • 2014-11-20
  • 2012-03-03
  • 2013-06-02
  • 2014-10-12
  • 2011-12-05
  • 1970-01-01
  • 2018-04-23
  • 1970-01-01
相关资源
最近更新 更多