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

时间:2011-02-02 11:36:31

标签: git version-control

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

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

6 个答案:

答案 0 :(得分:72)

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

git commit -a

git commit -am "commit message"

来自Pro Git书:

  

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

答案 1 :(得分:31)

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

(基于Charles Bailey's answer on a related question

答案 2 :(得分:16)

您可以使用:

git add -u

用于暂存自上次提交以来已修改的已跟踪文件。

来自git-add手册页:

  

-u
  --update

     

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

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

答案 3 :(得分:3)

我可能会遗漏一些东西,但git add不包含已删除的文件,你必须使用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 log显示了三次提交。

答案 4 :(得分:0)

我会小心使用git commit -a - 除非你确保你的.gitignore文件包含你不想添加的所有文件

我曾经多次使用过git commit -a,而且我不得不从git存储库中清理/删除临时文件等

答案 5 :(得分:0)

git 状态 在分支主 您的分支是最新的“origin/master”。

未为在此处输入提交而暂存的更改: (使用“git add ..enter here.”来更新将提交的内容) (使用“git restore ...”放弃工作目录中的更改) 修改:src/components/Header.js

未向提交添加任何更改(使用“git add”和/或“git commit -a”)

如果我们只尝试添加特定的修改文件,那么使用 git add "Modified file" 会抛出错误 $ git add Header.js 致命:路径规范“Header.js”与任何文件都不匹配

所以我使用了这个并推送 git add -u // 更新修改后的文件。

git commit -m "Header.js"。

git push

这对我来说效果很好。