协慌网

登录 贡献 社区

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只提交修改和删除的文件。

请注意,如果您的 Git 版本低于 2.0,并且使用了git add . ,那么您将需要使用git add -u . (请参阅 “ git add -Agit add .区别”)。

这为我工作:

#!/bin/bash

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

甚至更好:

$ git ls-files --modified | xargs git add
git commit -a -m "message"

-a:在此提交中包括所有当前已更改 / 删除的文件。但是请记住,不包括未跟踪的(新)文件。

-m:设置提交的消息