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

w8biq8rn  于 2023-03-11  发布在  Git
关注(0)|答案(9)|浏览(220)

我运行了“git status”,下面列出了一些被修改过的文件或标题为“changes not stage for commit”的文件,还列出了一些我想忽略的未跟踪文件(我在这些目录中有一个.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")
k0pti3hp

k0pti3hp1#

理想情况下,您的.gitignore应该防止未跟踪(和忽略)的文件显示在状态中,使用git add等添加。因此,我要求您更正您的.gitignore
您可以执行git add -u,以便它将暂存修改和删除的文件。
您也可以执行git commit -a来只提交修改和删除的文件。
请注意,如果您的Git版本低于2.0,并且使用git add .,则需要使用git add -u .(参见“Difference of “ git add -A ” and “ git add .“)。

vxf3dgd4

vxf3dgd42#

这对我很有效:

#!/bin/bash

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

或者更好:

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

cgvd09ve3#

要暂存修改和删除的文件:
git add -u
其中-u--update的缩写。

mzsu5hc0

mzsu5hc04#

git commit -a -m "message"

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

iih3973s

iih3973s5#

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

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
klh5stk1

klh5stk16#

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

.metadata
build
xriantvc

xriantvc7#

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

TL;DR:开始

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

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>

第二步

对于您的情况,请针对What now>键入u2

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

第三步

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

Update>> *

此时,所有修改过的文件都已添加到临时区域,您可以通过在What now>提示符下键入1s来验证状态(或者键入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会有很大帮助。

zsohkypk

zsohkypk8#

不确定这是一个功能还是一个bug,但这对我们很有效:
git commit '' -m "Message"
注意空文件列表''。Git将此解释为提交所有修改过的跟踪文件,即使它们没有暂存,并忽略未跟踪的文件。

sshcrbum

sshcrbum9#

**git commit -我是“你的信息在这里”**这对我很有效

相关问题