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

Является ли git commit -am избыточным, если я еще git добавляю?

Это избыточно для запуска git add ., а затем git commit -am "commit message"?

Можно ли запустить git add ., а затем git commit -m "commit message" или, альтернативно, просто git commit -am "commit message"?

4b9b3361

Ответ 1

Git add + git commit -m просто скопирует те файлы, которые вы добавили (новые и ранее отслеживаемые), но git commit -am зафиксирует все изменения в отслеживаемых файлах, но не добавляет новые файлы.

Ответ 2

Не удаляется запуск 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

Ответ 3

Собственно, git commit -a не всегда избыточен, так как он также удаляет файлы! Например, у вас есть два файла: один файл отслеживается другим. Теперь вы хотите удалить отслеживаемые (везде) и добавить не отслеживаемые.

Итак, вы удаляете отслеживаемый файл. Если вы затем используете только git add ., а затем git commit, он будет отслеживать новый, но не будет удалять старый файл в репозитории.

Итак, вы либо выполняете git rm …, либо используете git commit -a.

Ответ 4

Я думаю, что некоторые из предыдущих ответов не видели период после git add (ваш оригинальный вопрос и некоторые из ответов были отредактированы, чтобы сделать период более понятным).

git add . добавит все файлы в текущий каталог (и любые подкаталоги) в индекс (кроме тех, которые игнорируются .gitignore).

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

Следовательно, если все файлы уже отслеживаются с помощью git, то оба подхода имеют такой же эффект. С другой стороны, если новые файлы были созданы, то git add .; git commit добавит их в репозиторий, а git commit -a не будет.

git add .; git commit -a действительно избыточно. Все изменения уже добавлены в индекс, поэтому -a ничего не делает.

Ответ 5

Переключатель -a сообщает git, чтобы сгенерировать измененные файлы для добавления - это означает "все", а не "добавить". Если вы не добавили контент в новый файл, который должен быть добавлен в git, вы должны добавить его, используя git add, прежде чем выполнить его.

Если вы уже сделали git add ., то он уже добавил все файлы в текущий каталог, то есть как новые, так и измененные файлы. Следовательно, вам больше не нужен переключатель -a для повторного представления содержимого сцены. Таким образом, вы можете справедливо просто следить за ним с помощью git -m "msg"