我经常遇到git add
为提交编写一组文件的情况,但后来必须对这些文件进行修改,最后对{{1}中的相同文件进行修改}。
我是否可以执行Changed but not updated
只有git add
和Changed but not updated
列表中存在的文件?
Changes to be committed
对于上面的示例,我只想将markdsievers$git status
# On branch master
#
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: src/com/foo/Bar.java
# modified: src/com/foo/Foo.java
#
# Changed but not updated:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: src/com/foo/Bar.java
# modified: src/com/foo/Foo.java
# modified: src/com/foobar/FooBar.java
和Foo.java
但Bar.java
添加到FooBar.java
列表中。
答案 0 :(得分:4)
这是一种方式:
git add -u $(git status --porcelain | grep ^MM | cut -d ' ' -f 2)
答案 1 :(得分:0)
如果文件名包含空格,则接受的答案将不起作用。此情况下-u也没用,但如果没有Changed but not updated
和Changes to be committed
列表中的文件,则会添加所有未暂存的文件。请改用:
git add $(git status -z | perl -0ne 'print $1 if $_ =~ /^MM(.*)$/')
这仅适用于仅更改的文件。如果您希望这适用于已删除,添加,重命名或复制的文件,请使用:
git add $(git status -z | perl -0ne 'print $1 if $_ =~ /^[MADRC][MD](.*)$/')
但要注意最后一个。例如,如果文件是在索引中添加的,但是它的删除是非分段的,那么运行此命令也会删除索引中的文件,导致您丢失该文件的内容。
请注意,两者仅适用于您的git repo的根目录。