git只重新添加那些已经暂存的文件

时间:2011-08-26 03:49:31

标签: git

我经常遇到git add为提交编写一组文件的情况,但后来必须对这些文件进行修改,最后对{{1}中的相同文件进行修改}。

我是否可以执行Changed but not updated只有git addChanged 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.javaBar.java添加到FooBar.java列表中。

2 个答案:

答案 0 :(得分:4)

这是一种方式:

 git add -u $(git status --porcelain | grep ^MM | cut -d ' ' -f 2)

答案 1 :(得分:0)

如果文件名包含空格,则接受的答案将不起作用。此情况下-u也没用,但如果没有Changed but not updatedChanges 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的根目录。