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

我运行了“git状态”,下面列出了一些被修改/或在标题“未为提交暂存的更改”下的文件。它还列出了一些我想忽略的未跟踪文件(我在这些目录中有一个“. 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")
496470 次浏览

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

您可以执行git add -u,以便它将暂存修改和删除的文件。

您还可以执行git commit -a来仅提交修改和删除的文件。

请注意,如果您的Git版本在2.0之前并且使用了git add .,那么您需要使用git add -u .(请参阅““#2”和“#0”的区别”)。

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

.metadatabuild

这对我有效:

#!/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但这对我们有用:

git提交-m消息

注意空文件列表”。Git解释这一点以提交所有修改的跟踪文件,即使它们不是暂存的,并忽略未跟踪的文件。

git commit -a -m "message"

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

-m:设置提交的消息

暂存修改和删除的文件

git add -u

我想把修改后的文件放在暂存中,这样我就可以提交它们

太长别读: START

使用交互模式(git add -i),选择更新(在What now> prompt中键入2u),选择全部(在Update>>提示符中键入*),退出交互模式(在What now> prompt中键入7q)。

太长别读: END

对于更多的病人:

STEP 1

您可以使用交互模式。

git add --interactive

或简写形式,

git add -i

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

           staged     unstaged path1:    unchanged       +17/-0 package-lock.json2:    unchanged        +2/-0 package.json3:    unchanged       +2/-28 src/App.js4:    unchanged        +7/-6 src/App.test.js
*** Commands ***1: status       2: update       3: revert       4: add untracked5: patch        6: diff         7: quit         8: helpWhat now>

STEP 2

对于您的情况,键入u2What now>

What now>u

你下去,

           staged     unstaged path1:    unchanged       +17/-0 package-lock.json2:    unchanged        +2/-0 package.json3:    unchanged       +2/-28 src/App.js4:    unchanged        +7/-6 src/App.test.jsUpdate>> *

STEP 3

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

Update>> *

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

What now> 1

它会向您显示状态,

           staged     unstaged path1:       +17/-0      nothing package-lock.json2:        +2/-0      nothing package.json3:       +2/-28      nothing src/App.js4:        +7/-6      nothing src/App.test.js

我们可以在这里看到未上演列显示了列表中所有文件的文本“无”

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

git提交-am"你的消息在这里"这对我有用