Git: добавить vs push vs commit

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

Немного смущен, исходя из SVN, где "обновление" будет "добавлять" материал, а commit выполняет "push" и будет "добавлять" также

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

Ответ 1

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

  • git push переносит ваши изменения в удаленный репозиторий.

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

enter image description here

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

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

Ответ 2

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

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

git push Изменения акций

Ответ 3

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

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

Ответ 4

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

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

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

Ответ 5

add сообщает git, чтобы начать отслеживание файла.

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

push выталкивает локальное репо вверх.

Ответ 6

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

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

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