Git: добавить против push против фиксации

115

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

Просто немного запутался, исходящий из SVN, где «update» будет «добавлять» материал, а фиксация выполняет «push» и также «добавляет»

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

НКИ
источник
2
Хорошая книга про
мерзавца

Ответы:

163
  1. git addдобавляет ваши измененные файлы в очередь для фиксации позже . Файлы не зафиксированы

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

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

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

введите описание изображения здесь

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

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

abcd
источник
Итак, нажимает ли коммит локально, а затем отправляет на удаленный сервер, или нужно сначала выполнить фиксацию, а затем нажать, чтобы получить работу в удаленном репозитории?
Эндрю С.
2
Сначала вы должны выполнить фиксацию («git commit»), которая обновит ваш локальный репозиторий (также известный как на вашем локальном компьютере), затем вы должны нажать на сервер («git push»), который обновит удаленный репозиторий (на сервере github, например. )
Romain
Мне бы очень понравилась функция "мысленного добавления" в Git!
Цзюньчэнь Лю
1
Рекомендуется не только часто совершать коммит, но и часто нажимать. Это защитит вашу работу при выходе из строя жесткого диска.
CCC
86

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

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

git push разделяет изменения

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

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

Адам Байтек
источник
Кто-то должен объяснить разницу между локальным и удаленным github. То, что есть в местных и ремте. Это ключ, который вам нужно найти
Мехди Амроллахи
12

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

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

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


источник
7

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

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

push подталкивает вас к локальному репо вверх по течению.

hvgotcodes
источник
5

Очень хороший PDF-файл о многих секретах GIT.

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

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

lord_t
источник
2
Теперь мне нужно найти svn add и зафиксировать. Мой большой страх: их документы затем направят меня к git add и commit. И lord_t является автором указанных документов.
eric
Автор вопроса знал SVN, поэтому я предположил, что он знает команды svn.
lord_t
0

add -in git используется, чтобы сообщить git, какие файлы мы хотим зафиксировать, он помещает файлы в промежуточную область

commit- in git используется для сохранения файлов на локальном компьютере, поэтому, если мы внесем какие-либо изменения или даже удалим файлы, мы все равно сможем восстановить наши зафиксированные файлы

push - если мы фиксируем наши файлы на локальном компьютере, они все равно могут быть потеряны, если наш локальный компьютер будет потерян, поврежден и т. д., чтобы сохранить наши файлы в безопасности или поделиться нашими файлами, обычно мы хотим сохранить наши файлы на удаленном репозиторий вроде Github. Чтобы сэкономить на удаленных репозиториях, мы используем push

пример Создание файла с именем index.html git add index.html

Фиксация файла, который является поэтапным git commit -m 'имя вашего коммита'

Отправка файла в Github git push origin master

Герберт
источник