Я плохо знаком с мерзавцем, приезжающим из мира SVN. До сих пор это кажется намного более полезным, но я все еще разрабатываю петли.
В настоящее время мой рабочий процесс похож на это:
внесите изменения>, мерзавец добавляет.> фиксация мерзавца> вводят сообщение журнала
То, что я не понимаю, - то, почему я, кажется, должен добавить все свои файлы, прежде чем я буду фиксировать. Они уже являются объектом управления версиями? Почему фиксация мерзавца говорит мне, что нет никаких изменений, добавленных к фиксации, но также и не указывают, что я изменил файлы? Это говорит "Измененный, но не обновленное":. что это означает??
Извините, если это легко, я чувствую, что упускаю некоторую всеобъемлющую суть
Это позволяет вам разделять коммиты правками. Если вы хотите зафиксировать только эти файлы сейчас, в рамках одной фиксации, а затем следующие файлы сейчас, во второй фиксации, вы можете сделать:
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."
Вы добавляете файлы не в том смысле, что вы помещаете их под контроль git, но вы добавляете их в список изменений. Некоторые другие SCM, например perforce, тоже делают это. Это удобно для создания отдельных наборов изменений, которые вы еще не готовы фиксировать, но хотите фиксировать отдельными блоками.
Вы можете выполнить фиксацию более подрывным способом, просто выполнив git commit -a
- который зафиксирует все, что git знает об этом, было изменено, точно так же, как svn commit
делает.
(PS. Поскольку вы пришли из мира svn, я упомяну еще одну ошибку, которая на некоторое время заставила меня зациклиться - когда вы git diff
, он покажет вам только разница между вашим текущим состоянием и тем, что находится в списке изменений, а НЕ разница между вашим текущим состоянием и последней фиксацией. Если вы запустите git diff
сразу после добавления всех измененных файлов (например, git add -u
), вы увидите пустую разницу, хотя есть различия, которые необходимо зафиксировать!)
Git работает с использованием "области постановки", где вы готовите то, что собираетесь объединить в коммит. Итак, вы решаете, какой набор изменений вы хотите зафиксировать (например, все или подмножество), добавляете их в область постановки, а затем фиксируете то, что находится в области постановки.
Когда вы вызываете git status
, он показывает вам, что было добавлено в область постановки (т.е. "Changes to be committed"), что было изменено среди файлов, которые отслеживает git (т.е. "Changed but not updated"), и любые новые файлы, которые вы никогда не добавляли раньше (т.е. "Untracked files").
Если вы хотите просто зафиксировать то, что вы изменили, но не включать вновь созданные файлы, вы можете использовать git commit -a -m "Comment for modified files already under source control."