Refresh staged files

☆樱花仙子☆ 提交于 2020-12-24 08:06:02

问题


In git, is there any (simple) way to modify the index so that only changes to files which are already in it are added? It sounds kind of complicated, but what I want to achieve is simple.

Lets say my index looks like this (slightly stripped git status output):

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

Some changes to B are in the index, some aren't. C is not staged at all.

How can I update B in the index (stage its unstaged changes) without adding C?

I.e. I would like for the index to look like this:

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

In this simple case it can of course be achieved with a simple git add B, but I would like to know if there's a simple answer for the general case. I tried git add --refresh, but if I understand correctly, that only updates stat info.


回答1:


The following command will update the index to contain the other changes in B that has not been staged yet:

git update-index --again



回答2:


I don't know of a completely trivial way to do this, but:

git status --porcelain

will show file B (and only B) as state "MM", so:

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

will produce a list of such files.

There's no harm in "re-adding" A, though.

You can also use git diff-index --cached --name-status HEAD. (Might need this if your git is too old to have git status --porcelain.)



来源:https://stackoverflow.com/questions/10006462/refresh-staged-files

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!