Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Git 刷新暂存文件_Git_Git Add - Fatal编程技术网

Git 刷新暂存文件

Git 刷新暂存文件,git,git-add,Git,Git Add,在git中,是否有任何(简单的)方法来修改索引,以便只添加对其中已有文件的更改?这听起来有点复杂,但我想要实现的是简单的 假设我的索引看起来像这样(稍微剥离git statusoutput): 对B的一些更改在索引中,有些则没有。 C根本不分阶段进行 如何在不添加C的情况下更新索引中的B(将其未分级的更改分级) 即,我希望索引如下所示: # Changes to be committed: # modified: A # modified: B # # Chang

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

假设我的索引看起来像这样(稍微剥离
git status
output):

B
的一些更改在索引中,有些则没有。
C
根本不分阶段进行

如何在不添加
C
的情况下更新索引中的
B
(将其未分级的更改分级)

即,我希望索引如下所示:

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

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

我不知道有什么简单的方法可以做到这一点,但是:

git status --porcelain
将文件B(仅B)显示为状态“MM”,因此:

将生成此类文件的列表

不过,“再加上”A也没什么害处


您还可以使用
git diff index--cached--name status HEAD
。(如果git太旧,无法具有
git status--concer

则可能需要此命令,以更新索引,以包含尚未分段的其他B中的更改:

git update-index --again

你能展示一个真正的用例吗?我无法想象(当我添加一个文件并对其进行更多修改时,这并不自动意味着我也要添加这些更改,特别是当我不想在其他文件中添加更改时)。@JanHudec如果我更严格,只涉及那些应该提交的文件(
B
),我可能就不需要这样做了。然而,有时我会忘乎所以,开始做出应该在新提交中进行的更改(
C
),因此我将
B
添加到索引中。在提交之前,我总是检查diff--cached,有时在
B
中清理一些东西。那时我需要这个。我想这可能可以用另一种方式解决,比如说,我的观点是,当你在文件
X
中做一些事情,这些事情应该在提交
B
中进行,然后忘乎所以地做一些应该在提交
C
中进行的更改时,这些更改中的一些经常会再次出现在文件
X
中。在这种情况下,您需要手动添加-i个单独的大块头,而不仅仅是重新添加文件
X
。显然,如果你有点忘乎所以,你可能会注意到你正在更改的点周围有什么东西,这就是为什么额外的更改不太可能不触及第一组文件的原因。谢谢,我不知道--瓷器代表状态。它目前与-s/--short相同,但承诺继续可以进行机器解析,如果将其粘贴到脚本中,这一点很重要。:-)我尝试了git status--ceral | grep^[AM]M | cut-d'-f 2 | xargs git add,但在包含空格的文件名中失败。我想这可能是另一个问题,但也许你能帮忙?对于xargs-0,它在任何时候都不起作用all@axelarge:在管道中添加
tr'\n'\0'
,然后使用
xargs-0
Ugh,空格。我故意忽略了上面的内容。:-)git在这里不使用
-z
,而是使用引号对空格进行编码。这至少适用于一种情况:
git status--ceral | grep^MM | sed's/../'|而read var;不评估git添加$var;完成
但我不知道它是否适用于所有人(像这样使用
eval
不会给我温暖的模糊感…。啊,比我的方法好得多!完美的这正是我需要的
git status --porcelain | grep ^MM | cut -d' ' -f 2
git update-index --again