Git: добавить против push против commit - PullRequest
100 голосов
/ 26 мая 2011

В чем разница между git add, push и commit?

Просто немного сбит с толку из SVN, где "update" будет "добавлять" материал, а commit делает "нажмите "и также добавите"

В git есть все различные функции.Надеюсь на некоторые объяснения из вашего опыта.

Ответы [ 7 ]

145 голосов
/ 26 мая 2011
  1. git add добавляет ваши измененные файлы в очередь для последующей фиксации .Файлы не фиксируются
  2. git commit фиксирует добавленные файлы и создает новую ревизию с журналом ... Если вы не добавляете файлы, git ничего не фиксирует.Вы можете комбинировать оба действия с git commit -a

  3. git push, чтобы отправить ваши изменения в удаленный репозиторий.

Эта цифра этот шпаргалка дает хорошее представление о рабочем процессе

enter image description here

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

Наконец, причина, по которой push является отдельной командой, заключается в философии git.git является распределенной системой управления версиями, а ваш локальный рабочий каталог является вашим хранилищем!Все внесенные вами изменения мгновенно отражаются и регистрируются.push используется только для обновления удаленного репо (которым вы можете поделиться с другими), когда закончите с тем, над чем работаете.Это отличный способ работать и сохранять изменения локально (без нагрузки на сеть) и обновлять его только тогда, когда вы хотите, а не при каждом коммите.Это косвенно приводит к упрощению фиксации / ветвления и т. Д. (Почему бы и нет, верно? Сколько это будет стоить вам?), Что приведет к большему количеству точек сохранения, не мешая с репозиторием.

77 голосов
/ 27 мая 2011

git add выбирает изменения

git commit записывает изменения ЛОКАЛЬНО

git push делится изменениями

22 голосов
/ 26 мая 2011
  • git add добавляет файлы в индекс Git, который является промежуточной областью для объектов, подготовленных для фиксации.
  • git commit фиксирует файлы в индексе в хранилище, git commit -aэто ярлык, позволяющий сначала добавить все измененные отслеживаемые файлы в индекс.
  • git push отправляет все ожидающие изменения в удаленный репозиторий, в который отображается ваша ветка (например, на GitHub).1011 *

    Чтобы понять Git, вам нужно приложить больше усилий, чем просто просматривать документацию, но это определенно стоит того.Только не пытайтесь отображать команды Git непосредственно в Subversion, так как у большинства из них нет прямого аналога.

11 голосов
/ 10 ноября 2013

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

«Оказывается, что Git упорядочивает файл точно так же, как и при запуске команды git add. Если вы выполняете фиксацию сейчас, то, как она будет использоваться при вводе команды git add, версия файла benchmarks.rb, которая использовалась при последнем запуске команды git add, а не версия файла, которая выглядит в рабочем каталоге при запуске git commit. Если вы измените файл после запуска git add, вам придется снова запустить git add, чтобы подготовить последнюю версию файла: ”

Выдержка из: Чакон, Скотт. «Pro ​​Git». Springer, 2009-08-19T00: 00: 00 + 00: 00. интерактивные книги. Этот материал может быть защищен авторским правом.

7 голосов
/ 26 мая 2011

add указывает git начать отслеживать файл.

commit фиксирует ваши текущие изменения в вашем локальном репозитории

push толкает ваше локальное репо вверх по течению.

5 голосов
/ 26 мая 2011

Очень приятно pdf о многих секретах GIT.

Добавление такое же, как и в добавлении svn (хотя иногда оно используется для пометки файла как разрешенного).

Коммит также совпадает с svn, но он фиксирует изменения в вашем локальном репозитории.

1 голос
/ 21 апреля 2019

Я нахожу это изображение очень значимым:

enter image description here

(от: Оливер Стил - Мой рабочий процесс в Git (2008) )

...