刷新分阶段文件

时间:2012-04-04 07:10:39

标签: git git-add

在git中,是否有任何(简单)方法来修改索引,以便只添加已经存在于其中的文件的更改?这听起来有点复杂,但我想要实现的很简单。

让我们说我的索引看起来像这样(稍微剥离git status输出):

# Changes to be committed:
#       modified:   A
#       modified:   B
#
# Changed but not updated:
#       modified:   B
#       modified:   C
#
# Untracked files:
#       D

B的一些更改在索引中,有些则不是。 C根本没有上演。

如何在不添加B的情况下更新索引中的C(暂存其未暂停的更改)?

即。我希望索引看起来像这样:

# Changes to be committed:
#       modified:   A
#       modified:   B
#
# Changed but not updated:
#       modified:   C
#
# Untracked files:
#       D

在这个简单的情况下,它当然可以用一个简单的git add B来实现,但我想知道一般情况是否有一个简单的答案。我尝试了git add --refresh,但如果我理解正确,那只会更新统计信息。

2 个答案:

答案 0 :(得分:26)

以下命令将更新索引以包含尚未暂存的B中的其他更改:

git update-index --again

答案 1 :(得分:1)

我不知道这样做的完全无关紧要的方法,但是:

git status --porcelain

将文件B(并且仅B)显示为状态“MM”,因此:

git status --porcelain | grep ^MM | cut -d' ' -f 2

将生成此类文件的列表。

尽管如此,“重新加入”A并没有什么坏处。

您也可以使用git diff-index --cached --name-status HEAD。 (如果你的git太旧而不能拥有git status --porcelain,可能需要这个。)