Ответ 1
Следующая команда обновит индекс, чтобы содержать другие изменения в B, которые еще не были поставлены:
git update-index --again
В 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
, но если я правильно понял, это только обновляет статистику.
Следующая команда обновит индекс, чтобы содержать другие изменения в B, которые еще не были поставлены:
git update-index --again
Я не знаю абсолютно тривиального способа сделать это, но:
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
.)