Подтвердить что ты не робот

Обновить поставленные файлы

В 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, но если я правильно понял, это только обновляет статистику.

4b9b3361

Ответ 1

Следующая команда обновит индекс, чтобы содержать другие изменения в B, которые еще не были поставлены:

git update-index --again

Ответ 2

Я не знаю абсолютно тривиального способа сделать это, но:

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.)