Это избыточно для запуска git add .
, а затем git commit -am "commit message"
?
Можно ли запустить git add .
, а затем git commit -m "commit message"
или, альтернативно, просто git commit -am "commit message"
?
Это избыточно для запуска git add .
, а затем git commit -am "commit message"
?
Можно ли запустить git add .
, а затем git commit -m "commit message"
или, альтернативно, просто git commit -am "commit message"
?
Git add
+ git commit -m
просто скопирует те файлы, которые вы добавили (новые и ранее отслеживаемые), но git commit -am
зафиксирует все изменения в отслеживаемых файлах, но не добавляет новые файлы.
Не удаляется запуск git commit -am
, если вы удалили любые отслеживаемые файлы. См. Дополнительные пояснения ниже.
Пока вы находитесь в корневом каталоге и хотите добавить все новые файлы, изменения и удаления, вам нужно 3).
1) Зафиксируйте новые файлы и модификации ранее отслеживаемых файлов, но не добавляйте удаления.
С Git < 2,0:
$ git add .
$ git commit -m
С Git >= 2.0:
$ git add --ignore-removal .
$ git commit -m
2) Зафиксируйте изменения и удаления для отслеживаемых файлов, но не добавляйте новые файлы.
$ git commit -am
3) Зафиксируйте новые файлы и все измененные отслеживаемые файлы (как модификации, так и удаления). Или:
С Git < 2.0:
$ git add .
$ git commit -am
... Или:
$ git add -A
$ git commit -m
С Git >= 2.0:
$ git add .
$ git commit -m
Собственно, git commit -a
не всегда избыточен, так как он также удаляет файлы! Например, у вас есть два файла: один файл отслеживается другим. Теперь вы хотите удалить отслеживаемые (везде) и добавить не отслеживаемые.
Итак, вы удаляете отслеживаемый файл. Если вы затем используете только git add .
, а затем git commit
, он будет отслеживать новый, но не будет удалять старый файл в репозитории.
Итак, вы либо выполняете git rm …
, либо используете git commit -a
.
Я думаю, что некоторые из предыдущих ответов не видели период после git add
(ваш оригинальный вопрос и некоторые из ответов были отредактированы, чтобы сделать период более понятным).
git add .
добавит все файлы в текущий каталог (и любые подкаталоги) в индекс (кроме тех, которые игнорируются .gitignore
).
Параметр -a
для git commit
будет включать все изменения в файлы, которые уже отслеживаются с помощью git, даже если эти изменения еще не добавлены в индекс.
Следовательно, если все файлы уже отслеживаются с помощью git, то оба подхода имеют такой же эффект. С другой стороны, если новые файлы были созданы, то git add .; git commit
добавит их в репозиторий, а git commit -a
не будет.
git add .; git commit -a
действительно избыточно. Все изменения уже добавлены в индекс, поэтому -a
ничего не делает.
Переключатель -a
сообщает git, чтобы сгенерировать измененные файлы для добавления - это означает "все", а не "добавить". Если вы не добавили контент в новый файл, который должен быть добавлен в git, вы должны добавить его, используя git add, прежде чем выполнить его.
Если вы уже сделали git add .
, то он уже добавил все файлы в текущий каталог, то есть как новые, так и измененные файлы. Следовательно, вам больше не нужен переключатель -a
для повторного представления содержимого сцены. Таким образом, вы можете справедливо просто следить за ним с помощью git -m "msg"