git只添加已修改的更改并忽略未跟踪的文件

我运行了“git status”,下面列出了一些修改过的文件,或者在“未进行提交更改”的标题下。 它还列出了我想忽略的一些未跟踪的文件(我在这些目录中有一个“.gitignore”文件)。

我想把修改后的文件放到分区中,这样我就可以提交它们了。 当我运行“git add”时,它添加了修改后的文件和我想忽略的文件进行登台。

如何添加只有修改的文件,并忽略未跟踪的文件,如果呈现下面的git状态。

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

$ 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 . ”的区别 )。

这对我工作:

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

甚至更好:

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

你没有说目前你的.gitignore是什么,但是在你的根目录中有一个.gitignore和下面的内容。

 .metadata build 

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

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

执行:

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

编辑:(见评论)这可以在一个步骤中实现:

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