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

我想将修改后的文件放到暂存中,以便提交它们。当我运行“gitadd.”时,它将修改后的文件和我想忽略的文件添加到暂存中。

如果出现下面的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应该防止未跟踪(和忽略)的文件以状态显示,使用gitadd等添加。因此,我要求您更正.gitignor

您可以执行gitadd-u,这样它将暂存修改和删除的文件。

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

注意,如果您有2.0之前版本的Git,并且使用了Git add。,那么您需要使用gitadd-u。(参见“git-add-A”和“git-add.”的区别)。


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

.metadata
build

这对我有用:

#!/bin/bash

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

或者更好:

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

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

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

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

gitcommit“”-m“消息”

请注意空文件列表“”。Git将其解释为提交所有已修改的跟踪文件,即使它们未暂存,也忽略未跟踪的文件。


git commit -a -m "message"

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


暂存已修改和删除的文件

git add-u


我想将修改后的文件放到暂存中,以便提交它们

TL;DR:启动

使用交互式模式(git add-i),选择update(在What now>提示符中键入2或u),选择all(在update>>提示符中键入*),退出交互式模式(在Whatnow>提示中键入7或q)。

TL;DR:结束

对于更多患者:---

步骤1

您可以使用交互模式。

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

对于您的情况,在What now>中键入u或2,

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>> *

此时,所有修改过的文件都已添加到暂存区,您可以在What now>提示符中键入1或s来验证状态(或者只需键入q或7退出交互模式并运行通常的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

我们可以在这里看到,未分页的列显示列表中所有文件的文本“nothing”。

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


gitcommit-这对我有用吗