关于commit:git仅添加已修改的更改并忽略未跟踪的文件

git add only modified changes and ignore untracked files

我运行了"git status",下面列出的是一些修改过的文件/或标题"changes not staged for commit"。它还列出了一些我想忽略的未跟踪文件(我在这些目录中有一个".gitignore"文件)。

我想把修改过的文件放到临时文件中,以便提交它们。当我运行"git-add."时,它添加了修改过的文件和我想忽略的文件,以进行转移。

如果下面显示的是git状态,如何只添加修改过的文件并忽略未跟踪的文件?

另外,我的".gitignore"文件是否正常工作?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
$ git status
# On branch addLocation
# Changes not staged for commit:
#   (use"git add <file>..." to update what will be committed)
#   (use"git checkout -- <file>..." to discard changes in working directory)
#
#       modified:   someProject/path/domain/viewer/LocationDO.java
#       modified:   someProject/path/service/ld/LdService.java
#       modified:   someProject/path/service/ld/LdServiceImpl.java
#       modified:   someProject/path/web/jsf/viewer/LocationFormAction.java
#       modified:   someProject/war/WEB-INF/classes/message/viewer/viewer.properties
#       modified:   someProject/war/page/viewer/searchForm.xhtml
#
# Untracked files:
#   (use"git add <file>..." to include in what will be committed)
#
#       .metadata/
#       someProject/build/
no changes added to commit (use"git add" and/or"git commit -a")


理想情况下,您的.gitignore应该防止未跟踪(和忽略)的文件显示为状态,使用git add等添加,所以我会要求您更正您的.gitignore

您可以执行git add -u,这样它将逐步处理修改和删除的文件。

您还可以执行git commit -a操作,只提交修改和删除的文件。

请注意,如果2.0之前版本的Git使用了git add .,则需要使用git add -u .(参见"git add -A和"git add .的区别")。


这对我很有用:

1
2
3
#!/bin/bash

git add `git status | grep modified | sed 's/\(.*modified:\s*\)//'`

或者更好:

1
$ git ls-files --modified | xargs git add


您没有说当前的.gitignore是什么,但是根目录中包含以下内容的.gitignore应该可以做到这一点。

1
2
.metadata
build


1
git commit -a -m"message"

-A:包括此提交中当前更改/删除的所有文件。但请记住,未跟踪(新)文件不包括在内。-M:设置提交的消息


不确定这是一个特性还是一个bug,但这对我们有用:

江户十一〔11〕。

请注意空文件列表""。Git解释这一点以提交所有修改过的跟踪文件,即使它们不是分段的,也忽略未跟踪的文件。


我碰巧尝试过这个,这样我可以先看到文件列表:

1
2
3
git status | grep"modified:" | awk '{print"git add " $2}' > file.sh

cat ./file.sh

执行:

1
2
chmod a+x file.sh
./file.sh

编辑:(见注释)这可以通过一个步骤实现:

1
git status | grep modified | awk '{print $2}' | xargs git add && git status