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

Ste*_*eve 610 git commit staging gitignore

我运行了"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")
Run Code Online (Sandbox Code Playgroud)

man*_*lds 840

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

您可以这样git add -u做,它将分阶段修改和删除文件.

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

请注意,如果您在2.0之前使用Git版本并使用git add .,那么您需要使用git add -u .(参见" 差异git add -A"和" git add ." ").

  • 感兴趣的是,这个(`add -u`)不会添加__only__`modified`文件,它还会"添加"`deleted`的文件......我正在尝试阻止它. (71认同)
  • 没有明确的答案,只有"为大多数人工作"的答案?我必须使用另一个进程才能正确执行此操作?这怎么没有内置到git add中?这似乎是一件很平常的事情. (7认同)
  • 为了只添加修改过的文件,我通常会在我的repo的顶级目录中找到并输入`for fil in $(git diff --name-only --relative); 做git add $ fil; done`.如果我要使用它(我没有),我会在我的`〜/ .bashrc`文件中为它做一个别名.当然,这只适用于bash. (6认同)
  • `git add -u` 是`git add --update` 的缩写,`git commit -a` 是`git commit --all` 的缩写 (4认同)
  • *nb* 如果您有奇怪的文件名(空格、星号等),这些注释中提到的方法将失败。要正确转义任何奇怪命名的文件,请使用:`IFS=$(echo -en "\n\b"); 对于 $(git diff --name-only) 中的文件;做 git add "$file"; 完成` (2认同)

use*_*329 92

这对我有用:

#!/bin/bash

git add `git status | grep modified | sed 's/\(.*modified:\s*\)//'`
Run Code Online (Sandbox Code Playgroud)

甚至更好:

$ git ls-files --modified | xargs git add
Run Code Online (Sandbox Code Playgroud)

  • --modified似乎包括删除以及刚修改 (5认同)
  • git diff-files -z --diff-filter=M --name-only | xargs -0 git add --dry-run 似乎运行良好。 (2认同)

小智 16

暂存修改和删除的文件

git add -u


Sau*_*abh 8

git commit -a -m "message"
Run Code Online (Sandbox Code Playgroud)

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

-m:设置提交的消息

  • 或者简单地“git commit -am“消息””。 (5认同)

Asi*_*ick 6

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

长话短说:开始

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

长话短说:结束

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

步骤1

您可以使用交互模式。

git add --interactive 
Run Code Online (Sandbox Code Playgroud)

或简写形式,

git add -i
Run Code Online (Sandbox Code Playgroud)

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

           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>
Run Code Online (Sandbox Code Playgroud)

第2步

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

What now>u
Run Code Online (Sandbox Code Playgroud)

你到下面,

           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>> *
Run Code Online (Sandbox Code Playgroud)

步骤3

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

Update>> *
Run Code Online (Sandbox Code Playgroud)

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

What now> 1
Run Code Online (Sandbox Code Playgroud)

这会向您显示状态,

           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
Run Code Online (Sandbox Code Playgroud)

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

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


Mik*_*e Q 5

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

git status | grep "modified:" | awk '{print "git add  " $2}' > file.sh

cat ./file.sh
Run Code Online (Sandbox Code Playgroud)

执行:

chmod a+x file.sh
./file.sh 
Run Code Online (Sandbox Code Playgroud)

编辑:(见评论)这可以一步实现:

git status | grep "modified:" | awk '{print $2}' | xargs git add && git status
Run Code Online (Sandbox Code Playgroud)

  • 这可以一步实现:`git status | grep 修改 | awk '{print $2}' | xargs git add &amp;&amp; git status` (2认同)