如何提交只修改(而不是新的或删除)的文件?

git status显示了一堆被修改的文件和一些被删除的文件。 我想先提交修改后的文件,然后删除的文件。 我没有在git add中看到任何选项,使我能够做到这一点。 我该怎么做?

编辑 :正如指出的, git add不会上演被删除的文件,所以git add . 会做。 但是它包含了那些没有被跟踪的文件的副作用,我也想避免。 我已经相应地改变了问题的标题。

以下命令应该做的伎俩:

 git commit -a 

要么

 git commit -am "commit message" 

从Pro Git书籍:

为git commit命令提供-a选项使得Git在执行提交之前自动对已经被跟踪的每个文件进行分级

git diff --name-only --diff-filter=M | xargs git add

(基于Charles Bailey对相关问题的回答 )

你可以使用:

 git add -u 

对自上次提交后已修改的文件进行分段。

从git-add手册页:

-u
–update

只匹配已经跟踪的索引文件而不是工作树。 这意味着它永远不会展示新文件,但是它将逐步修改被跟踪文件的新内容,并且如果工作树中的相应文件已被删除,它将从索引中删除文件。 如果没有,默认为“。”; 换句话说,更新当前目录及其子目录中的所有跟踪文件。

不知道何时添加此function。

我可能会失去一些东西,但Git添加不包括删除的文件,你必须使用Git RM来删除这些:

 mkdir git-test cd git-test git init touch a touch b touch c git add . git commit -m "Initial" echo "a" > a echo "b" > b rm c git status # On branch master # Changed but not updated: # (use "git add/rm <file>..." to update what will be committed) # (use "git checkout -- <file>..." to discard changes in working directory) # # modified: a # modified: b # deleted: c # git add . # On branch master # Changes to be committed: # (use "git reset HEAD <file>..." to unstage) # # modified: a # modified: b # # Changed but not updated: # (use "git add/rm <file>..." to update what will be committed) # (use "git checkout -- <file>..." to discard changes in working directory) # # deleted: c # git commit -m "Changed" git status # On branch master # Changed but not updated: # (use "git add/rm <file>..." to update what will be committed) # (use "git checkout -- <file>..." to discard changes in working directory) # # deleted: c # git rm c git commit -m "Deleted" 

而git日志显示了三个提交。

我会小心使用git commit -a – 除非您确定您的.gitignore文件包含所有您不想在其中添加的文件

我已经使用git commit了很多次,在这种情况下,我最终不得不从git仓库清理/删除临时文件等