如何在git中重新添加添加的文件(仅更新暂存文件)?

时间:2016-09-13 19:07:57

标签: git git-add

我们修改了path/to/another/path/to/main/中的文件 path/to/main/中的文件已添加到git缓存中,但我们更新了path/to/main/Bar.php个文件 AGAIN 。我们现在有以下情况:

$ git status
[...]
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

        modified:   path/to/main/Foo.php
        modified:   path/to/main/Bar.php

Changes not staged for commit:
    (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

        modified:   path/to/main/Bar.php
        modified:   path/to/another/Aaa.php
        modified:   path/to/another/Bbb.php

(注意路径/ to / main / Bar.php显示两次)

我需要一个可以读取之前添加的文件而不使用特定路径的命令。

P.S。 git add --update将添加所有这些文件。它没有用。

P.P.S。此命令应该能够读取modified:new file:类型。

UPD1

感谢@AyonNahiyan,是的,它可以在bash中运行。但也许有一个命令没有使用bash技巧(子命令)。

3 个答案:

答案 0 :(得分:8)

这显示了仅暂存的文件列表:

git diff --name-only --cached

现在使用新的更改暂存这些文件(它将在bash中运行)

git add $(git diff --name-only --cached)

答案 1 :(得分:4)

git update-index可用于此目的。

特别是

git update-index --again

应该有用。

--again选项选择索引中已与HEAD不同的文件。

update-index的实际操作是将这些文件的新内容编入索引。

答案 2 :(得分:3)

git update-index --again

会做你想做的。请注意,此命令默认在当前工作目录(和子目录,递归)上运行。如果要将命令应用于整个存储库,请添加 pathspec:

git update-index --again :/:

:/: 这里的意思是“工作树的根”。

附言您可以将此命令的别名添加到您的 .gitconfig 文件中,例如:

[alias]
    readd = update-index --again :/: