在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
,但如果我理解正确,那只会更新统计信息。
答案 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
,可能需要这个。)