[英]git add only modified changes and ignore untracked files
我运行了“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")
理想情况下,您的.gitignore
应该防止未跟踪(和忽略)的文件显示在状态中,使用git add
等git add
。所以我会要求您更正您的.gitignore
您可以执行git add -u
以便它将修改和删除的文件git add -u
。
您也可以执行git commit -a
以仅提交修改和删除的文件。
请注意,如果您拥有 2.0 之前版本的 Git 并使用git add .
,那么你需要使用git add -u .
(参见“ “ git add -A
”和“ git add .
”的区别”)。
这对我有用:
#!/bin/bash
git add `git status | grep modified | sed 's/\(.*modified:\s*\)//'`
或者甚至更好:
$ git ls-files --modified | xargs git add
git commit -a -m "message"
-a :包括此提交中所有当前更改/删除的文件。 但是请记住,不包括未跟踪的(新)文件。
-m :设置提交的消息
暂存修改和删除的文件
git add -u
我碰巧尝试了这个,所以我可以先看到文件列表:
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
您没有说当前的.gitignore
是什么,但是根目录中包含以下内容的.gitignore
应该可以解决问题。
.metadata
build
不确定这是功能还是错误,但这对我们有用:
git commit '' -m "Message"
请注意空文件列表 ''。 Git 将此解释为提交所有修改过的跟踪文件,即使它们没有暂存,并忽略未跟踪的文件。
我想将修改后的文件放在暂存中,以便我可以提交它们
TL;博士:开始
使用交互模式( git add -i
),选择更新(在What now> prompt
键入2
或u
),全选(在Update>>
提示中键入*
),退出交互模式(在What now> prompt
键入7
或q
) .
TL;博士:结束
对于更多的耐心:---
第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
我们可以在这里看到, unstaged列显示列表中所有文件的文本“nothing” 。
对于关于忽略未跟踪文件的问题的第二部分,我相信这个SO 答案会很有帮助。
忽略的一种方法是使用git clean -xffd
,它将清理未跟踪的文件。 然后你可以使用git add -A
git commit -am “你的信息在这里”这对我有用
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.