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

时间:2011-08-19 16:40:59

标签: git commit gitignore staging

我运行了“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")

10 个答案:

答案 0 :(得分:772)

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

您可以执行git add -u,以便分阶段修改和删除文件。

您也可以git commit -a仅提交已修改和已删除的文件。

请注意,如果您在2.0之前使用Git版本并使用git add .,那么您需要使用git add -u .(请参阅“Difference of “git add -A” and “git add .”)。

答案 1 :(得分:89)

这对我有用:

#!/bin/bash

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

甚至更好:

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

答案 2 :(得分:8)

要分阶段修改和删除文件

git add -u

答案 3 :(得分:4)

您没有说出目前的.gitignore是什么,但是根目录中包含以下内容的.gitignore应该可以解决问题。

.metadata
build

答案 4 :(得分:1)

git commit -a -m "message"

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

-m:设置提交的消息

答案 5 :(得分:0)

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

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

答案 6 :(得分:0)

不确定这是功能还是错误,但这对我们有用:

git commit '' -m "Message"

注意空文件列表“。 Git将此解释为提交所有修改的跟踪文件(即使它们未暂存),并忽略未跟踪的文件。

答案 7 :(得分:0)

<块引用>

我想将修改后的文件放入暂存区,以便我可以提交

TL;DR:开始

使用交互模式(git add -i),选择更新(在2中输入uWhat now> prompt),全选(在*中输入Update>> }}提示),退出交互模式(在7中输入qWhat now> prompt)。

TL;DR:结束

对于更有耐心的人:---

第一步

您可以使用交互模式。

git add --interactive 

或 简写形式,

git add -i

这将列出所有已修改文件及其状态,以及您可以使用的一系列命令选项,例如:

           staged     unstaged path
  1:    unchanged       +17/-0 package-lock.json
  2:    unchanged        +2/-0 package.json
  3:    unchanged       +2/-28 src/App.js
  4:    unchanged        +7/-6 src/App.test.js

*** Commands ***
  1: status       2: update       3: revert       4: add untracked
  5: patch        6: diff         7: quit         8: help
What now>

第 2 步

对于您的情况,输入 u2 反对 What now>

What now>u

你在下面,

           staged     unstaged path
  1:    unchanged       +17/-0 package-lock.json
  2:    unchanged        +2/-0 package.json
  3:    unchanged       +2/-28 src/App.js
  4:    unchanged        +7/-6 src/App.test.js
Update>> *

第 3 步

Update>> 提示中,输入 * 将上述列表中的所有文件添加到暂存区(您也可以通过提供逗号分隔的数字来添加单个文件),

Update>> *

此时,您所有修改过的文件都已添加到暂存区,您可以通过在 1 提示中键入 sWhat now>(或只需通过输入 q7 退出交互模式并运行通常的 git status 命令),

What now> 1

这将显示您的状态,

           staged     unstaged path
  1:       +17/-0      nothing package-lock.json
  2:        +2/-0      nothing package.json
  3:       +2/-28      nothing src/App.js
  4:        +7/-6      nothing src/App.test.js

我们在这里可以看到,unstaged 列显示了列表中所有文件的文本 "nothing"

关于忽略未跟踪文件的问题的第二部分,我相信这个 SO answer 会很有帮助。

答案 8 :(得分:0)

忽略的一种方法是使用 git clean -xffd,它将清除未跟踪的文件。那么你可以使用 git add -A

答案 9 :(得分:-2)

git commit -am "your message here" 这对我有用