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

Ped*_*ino 52 git version-control

git status显示了一堆被修改的文件和一些被删除的文件.我想首先提交修改后的文件,然后提交已删除的文件.我没有看到任何可以git add让我这样做的选项.我该怎么做?

编辑:正如所指出的,git add无论如何都不会上传已删除的文件,所以git add .会这样做.但它有包含未跟踪的文件的副作用,我也想避免.我已相应更改了问题的标题.

tok*_*rev 76

以下命令应该可以解决问题:

git commit -a
Run Code Online (Sandbox Code Playgroud)

要么

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

Pro Git书中:

为git commit命令提供-a选项使Git在执行提交之前自动暂存已跟踪的每个文件

  • 这不回答这个问题.-a将包括:已修改和已删除的文件.这是完全错误的,应该删除. (6认同)

Ped*_*ino 31

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

(根据Charles Bailey对相关问题的回答)

  • 仅仅为了推送修改过的文件,这样做有点麻烦.你不觉得吗? (8认同)
  • @Cherian可以为此做出别名 (2认同)

jln*_*brg 16

你可以使用:

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

暂存自上次提交后已修改的已跟踪文件.

git-add手册页:

-u
--update

仅匹配索引中已跟踪的文件而不是工作树.这意味着它永远不会暂存新文件,但它会暂存已修改的跟踪文件的新内容,并且如果已删除工作树中的相应文件,它将从索引中删除文件.如果没有,则默认为"."; 换句话说,更新当前目录及其子目录中的所有跟踪文件.

不确定何时添加了此功能.

  • @AlexisWilke 否,但它会将文件添加到暂存区,使它们准备好提交到当前签出分支中的新提交。之后您需要使用 `git commit` 提交分阶段的更改。 (3认同)
  • `git add -u; git commit`基本上等同于`git commit -a`.它将提交文件删除,因此它不回答问题. (2认同)