Это избыточно для запуска 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"