Должен ли я добавлять файлы в git каждый раз, когда я хочу зафиксировать? - PullRequest
54 голосов
/ 01 июля 2010

Я новичок в Git, пришедший из мира SVN.Пока что это кажется намного более полезным, но я все еще работаю над изломами.

В настоящее время мой рабочий процесс выглядит следующим образом:

внести изменения> git add.> git commit> введите сообщение журнала

Что я не понимаю, так это то, почему мне кажется, что мне нужно добавить все свои файлы, прежде чем я фиксирую.Они уже находятся под контролем версий?Почему git commit говорит мне, что в коммит не было внесено никаких изменений, но также указывает, что я изменил файлы?Там написано "Изменено, но не обновлено:".Что это значит ??

Извините, если это легко, я чувствую, что мне не хватает какой-то всеобъемлющей точки

Ответы [ 3 ]

45 голосов
/ 01 июля 2010

Это позволяет вам разделять коммиты по изменениям. Если вы хотите зафиксировать эти файлы только сейчас, под одним коммитом, а затем эти следующие файлы сейчас, под вторым коммитом, вы можете сделать:

git add files_under_one_topic
git commit -m "this is about one thing"

git add files_left_over_to_commit_about_a_completely_different_topic
git commit -m "this is about another thing."
20 голосов
/ 01 июля 2010

Git работает, используя «промежуточную» область, где вы готовите то, что собираетесь объединить в коммит. Итак, вы решили, какой набор изменений вы хотите зафиксировать (например, все или подмножество), добавьте их в область подготовки, а затем подтвердите то, что находится в области подготовки.

Когда вы вызываете git status, он показывает, что было добавлено в промежуточную область (то есть «Изменения, которые должны быть зафиксированы»), что было изменено среди файлов, которые отслеживает git (т.е. изменено, но не обновлено »), и любые новые файлы, которые вы никогда не добавляли ранее (например, файлы без отслеживания).

Если вы хотите просто зафиксировать материал, который вы изменили, но не включать вновь созданные файлы, вы можете использовать git commit -a -m "Comment for modified files already under source control."

12 голосов
/ 01 июля 2010

Вы не добавляете файлы в том смысле, что ставите их под контроль git, но добавляете их в список изменений.Некоторые другие SCM, такие как Perforce, также делают это.Это удобно для создания отдельных наборов изменений, которые вы еще не готовы совершить, но вы хотите зафиксировать их в отдельных блоках.

Вы можете зафиксировать более подрывным способом, просто выполнив git commit -a -который передаст все, что git знает о том, что было изменено, точно так же, как делает svn commit.

(PS. Поскольку вы пришли из мира SVN, я упомяну еще одну ошибку, которая бросила меня зацикл на некоторое время - когда вы git diff, он покажет вам разницу между вашим текущим состоянием и тем, что находится в списке изменений, а НЕ разницей между вашим текущим состоянием и последним коммитом. Если вы сразу запустите git diffпосле добавления всех измененных файлов (например, git add -u) вы увидите пустой diff, даже если есть различия, которые нужно зафиксировать!)

...