Как зафиксировать только измененные (а не новые или удаленные) файлы? - PullRequest
50 голосов
/ 02 февраля 2011

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

РЕДАКТИРОВАТЬ : Как указывалось, git add в любом случае не поставил бы удаленные файлы, поэтому git add . подойдет.Но у этого есть побочный эффект включения файлов, которые не были отслежены, чего я также хотел бы избежать.Я изменил название вопроса соответственно.

Ответы [ 5 ]

72 голосов
/ 17 августа 2012

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

git commit -a

или

git commit -am "commit message"

Из книги Pro Git :

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

31 голосов
/ 02 февраля 2011

git diff --name-only --diff-filter=M | xargs git add

(на основе ответа Чарльза Бейли на связанный вопрос )

16 голосов
/ 25 ноября 2014

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

git add -u

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

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

-u
--update

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

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

3 голосов
/ 02 февраля 2011

Я могу что-то упустить, но в 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 показаны три коммита.

0 голосов
/ 07 марта 2014

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...