Является ли git commit -am избыточным, если я сделаю git add раньше? - PullRequest
38 голосов
/ 02 сентября 2010

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

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

Ответы [ 5 ]

46 голосов
/ 02 сентября 2010

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

27 голосов
/ 15 марта 2013

С Git до версии 2.0 запускать git commit -am не обязательно, если вы удалили какие-либо отслеживаемые файлы. Смотрите дальнейшее объяснение опций ниже.

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

1) Зафиксировать новые файлы и модификации ранее отслеженных файлов, но не добавлять удаления .

С Git

$ git add .
$ git commit -m

С Git> = 2.0:

$ git add --ignore-removal .
$ git commit -m

2) Вносить изменения и удаления в отслеживаемые файлы, но не добавлять новые файлы .

$ git commit -am

3) Зафиксировать новые файлы и все измененные отслеживаемые файлы (как модификации, так и удаления). Или:

с Git <2.0: </p>

$ git add .
$ git commit -am

... Или:

$ git add -A
$ git commit -m

С Git> = 2.0:

$ git add .
$ git commit -m
9 голосов
/ 07 июня 2011

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

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

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

4 голосов
/ 02 сентября 2010

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

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

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

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

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

1 голос
/ 02 сентября 2010

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

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

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