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

Как фиксировать только измененные (а не новые или удаленные) файлы?

git status показывает кучу файлов, которые были изменены, и некоторые из них были удалены. Я хочу сначала перенести измененные файлы, а затем удаленные. Я не вижу никакой опции в git add, которая позволяет мне это делать. Как я могу это сделать?

EDIT. Как указано, git add в любом случае не удалил бы удаленные файлы, поэтому git add .. Но это имеет побочный эффект от включения файлов, которые не отслеживались, что я также хотел бы избежать. Я соответствующим образом изменил название вопроса.

4b9b3361

Ответ 1

Следующая команда должна выполнить трюк:

git commit -a

или

git commit -am "commit message"

Из Pro Git:

Предоставление опции -a для команды git commit делает git автоматически обрабатывать каждый файл, который уже отслеживается, перед выполнением commit

Ответ 3

Вы можете использовать:

git add -u

для создания уже отслеживаемых файлов, которые были изменены с момента последнего фиксации.

Из git-add man-страница:

-u
--update

Совпадение только с уже отслеживаемыми файлами в индексе, а не с рабочим деревом. Это означает, что он никогда не будет создавать новые файлы, но будет обрабатывать измененное новое содержимое отслеживаемых файлов и что он удалит файлы из индекса, если соответствующие файлы в рабочем дереве были удалены. Если нет, по умолчанию используется значение "."; другими словами, обновить все отслеживаемые файлы в текущем каталоге и его подкаталогах.

Не уверен, когда эта функция была добавлена.

Ответ 4

Мне может быть что-то не хватает, но git add не включает удаленные файлы, вы должны использовать git rm, чтобы удалить их:

mkdir git-test
cd git-test
git init
touch a
touch b
touch c
git add .
git commit -m "Initial"
echo "a" > a
echo "b" > b
rm c
git status

# On branch master
# Changed but not updated:
#   (use "git add/rm <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#       modified:   a
#       modified:   b
#       deleted:    c
#

git add .

# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#       modified:   a
#       modified:   b
#
# Changed but not updated:
#   (use "git add/rm <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#       deleted:    c
#

git commit -m "Changed"
git status

# On branch master
# Changed but not updated:
#   (use "git add/rm <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#       deleted:    c
#

git rm c
git commit -m "Deleted"

И git журнал показывает три фиксации.

Ответ 5

Я был бы осторожен с использованием git commit -a - если вы не удостоверились, что ваш файл .gitignore имеет ВСЕ файлы, которые вы НЕ хотите добавлять там

Я использовал git commit -a много раз в тех областях, где это было не так, и мне пришлось очищать/удалять временные файлы и т.д. из репозитория git