В чем различия между «git commit» и «git push»?

895

В учебнике по Git, который я рассмотрю, git commitон используется для хранения внесенных вами изменений.

Что git pushиспользуется тогда?

Бен
источник
83
Вы также можете ознакомиться с «Git cheatsheet», который мне очень помог понять концепцию: ndpsoftware.com/git-cheatsheet.html
adriendenat
Вот еще один шпаргалка: atlassian.com/git/tutorials/atlassian-git-cheatsheet
Каньон Колоб
2
нет ответа, так как он уже был предоставлен. просто наблюдение. мне кажется, что коммит действительно должен называться сохранением, а push - коммитом. Классический сценарий именования.
Дублин

Ответы:

1619

По сути, git commit« записывает изменения в хранилище », а git push« обновляет удаленные ссылки вместе со связанными объектами». ». Таким образом, первый используется в связи с вашим локальным хранилищем, а второй - для взаимодействия с удаленным хранилищем.

Вот хорошая картинка от Оливера Стила , которая объясняет модель git и команды:

Git команды транспорта данных

Узнайте больше о GitReady.comgit push и git pullо нем (статья, на которую я ссылался первой)

tanascius
источник
20
Вот оригинальный источник: osteele.com/archives/2008/05/my-git-workflow с другим изображением рабочего процесса git
tanascius,
9
@ben github - это всего лишь одно решение для размещения вашего общедоступного хранилища "в облаке", git pushс которым можно работать. В действительности, местом назначения git pushможет быть любое git-хранилище. Это может быть ваш собственный локальный жесткий диск в другом каталоге ( git remote add clone ~/proj/clone.git; git push clone masterили git push ~/proj/clone.git master, например) или хранилище git, которое обслуживает ваш собственный хост.
Santa
2
так ... вам нужно сначала нажать или сделать коммит?
Кокодоко
5
@ Пит начинается с вашего рабочего пространства, где вы изменяете файлы. Затем вы добавляете их в индекс, фиксируете их в локальном репозитории и - наконец
отправляете
2
@ Mr.Hyde нет, это невозможно. Git в качестве распределенного контроля версий требует наличия локальной копии.
Танаскиус
215

commit : добавление изменений в локальный репозиторий

push : перенести последние коммиты на удаленный сервер

TheHippo
источник
56

Ну, в основном git commit помещает ваши изменения в локальное хранилище, а git push отправляет ваши изменения в удаленное местоположение.

markovuksanovic
источник
9
это мой второй день использования GIT. Когда я смотрю на ответы выше, я все еще не могу получить четкую картину, но ваш ответ только прибивает его. Спасибо.
Бофа
1
git pushЗагружает ли актуально обновленные файлы или какой-то специальный «diff» файл?
multigoodverse
27

git pushиспользуется для добавления коммитов, которые вы сделали в локальном репозитории, в удаленный - вместе с тем git pullон позволяет людям сотрудничать.

Майкл Боргвардт
источник
26

Поскольку git - это распределенная система управления версиями, разница в том, что commit будет фиксировать изменения в вашем локальном репозитории, тогда как push будет передавать изменения до удаленного репо.

Джастин этир
источник
19

Совершить : снимок | Changeset | History_record | Версия | «Сохранить как» хранилища. Git репозиторий = серия (дерево) коммитов .

Локальный репозиторий: репозиторий на вашем компьютере.

Удаленный репозиторий: репозиторий на сервере ( Github ).

git commit: Добавить новый коммит (последний коммит + поэтапные модификации) в локальный репозиторий. (Все коммиты хранятся в /.git)

git push, git pull: Синхронизировать локальный репозиторий со связанным с ним удаленным репозиторием. push- применить изменения с локального на удаленный , pull- применить изменения с удаленного на локальный .

xged
источник
11

git commitзапишите ваши изменения в локальный репозиторий.

git push обновление с удаленным хранилищем с вашими локальными изменениями.

Naresh
источник
20
Ваш ответ в основном идентичен этому ответу , он не добавляет ничего нового.
7

Три вещи на заметку:

1) Рабочий каталог ----- папка, в которой находится наш файл кодов

2) Локальный репозиторий ------ Это внутри нашей системы. Когда мы впервые создаем команду COMMIT, создается этот локальный репозиторий. в том же месте, где находится наш рабочий каталог,
создается файл Checkit (.git).
После этого, когда мы делаем коммит, он сохраняет изменения, которые мы вносим в файл Working Directory в локальный репозиторий (.git).

3) Удаленный репозиторий ----- Он расположен вне нашей системы, как и на серверах, расположенных в любой точке мира. как GitHub. Когда мы выполняем команду PUSH, коды из нашего локального хранилища сохраняются в этом удаленном хранилище.

ДЕВИНДЕР ТАКУР
источник
7

Просто хочу добавить следующие пункты:

Yon не может отправлять сообщения до тех пор, пока вы не совершите коммит, поскольку мы используем git pushдля отправки коммитов, сделанных в вашей локальной ветви, в удаленный репозиторий

Команда git pushпринимает два аргумента:

Удаленное имя, например, origin Имя ветви, например,master

Например:

git push  <REMOTENAME> <BRANCHNAME> 
git push  origin       master
Фейсал Шейх
источник
4

Очень грубая аналогия: если мы сравним git commitс сохранением отредактированного файла, то git pushскопируем этот файл в другое место.

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

атп
источник
1

Проще понять использование команд git, addи commitесли вы представляете, что файл журнала поддерживается в вашем репозитории на Github. Типовой файл журнала проекта для меня может выглядеть так:

---------------- Day 1 --------------------
Message: Completed Task A
Index of files changed: File1, File2

Message: Completed Task B
Index of files changed: File2, File3
-------------------------------------------

---------------- Day 2 --------------------
Message: Corrected typos
Index of files changed: File3, File1
-------------------------------------------
...
...
...and so on

Я обычно начинаю свой день с git pullзапроса и заканчиваю его git pushзапросом. Таким образом, все в дневной записи соответствует тому, что происходит между ними. В течение каждого дня есть одна или несколько логических задач , которые требуют изменения нескольких файлов. Файлы, отредактированные во время этой задачи, перечислены в индексе.

Каждая из этих подзадач (Задача A и Задача B здесь) является отдельными коммитами. Команда git addдобавляет файлы в список «Индекс измененных файлов». Этот процесс также называется постановкой и в действительности записывает измененные файлы и выполненные изменения. git commit записывает / завершает изменения и соответствующий индексный список вместе с пользовательским сообщением, которое может быть использовано для дальнейшего использования.

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

В качестве примера, чтобы получить вторую запись в этом воображаемом лог-файле, я бы сделал:

git pull
# Make changes to File3 and File4
git add File3 File4
# Verify changes, run tests etc..
git commit -m 'Corrected typos'
git push

В двух словах, git addи git commitпозволяют разбить изменения в основной репозиторий в систематические логические подразделах изменений. Как уже отмечалось в других ответах и ​​комментариях, у них, конечно, есть много других применений. Тем не менее, это один из наиболее распространенных способов использования Git, который является многоступенчатой ​​системой контроля версий в отличие от других популярных систем, таких как Svn.

Сибин Джозеф
источник
0

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

это означает, что мы можем сделать множество коммитов, прежде чем мы отправим на удаленный сервер (мы можем увидеть список произошедших коммитов и сообщения), git сохраняет каждый коммит с идентификатором коммита, который является 40-значным кодом

и я использую git push только тогда, когда я хотел увидеть свои изменения в удаленном режиме (там после того, как я проверю, работает ли мой код в jenkins)

Сай Коти
источник
-1

Ну, в основном git commit помещает ваши изменения в локальное хранилище, а git push отправляет ваши изменения в удаленное местоположение. Поскольку git - это распределенная система управления версиями, разница в том, что commit будет фиксировать изменения в вашем локальном репозитории, тогда как push будет передавать изменения до удаленного репо

источник Google

http://gitref.org/basic/ эта ссылка тоже будет очень полезна

https://git-scm.com/docs/git-commit

Оройо Сегун
источник
Этот ответ копирует дословно другие ответы в один.
Джеффри Опоку-Менса,
Это не приносит ничего нового для всего, что уже было сказано ранее ...
18:08
-1

с точки зрения непрофессионала, git commitэто шаг до git pushтого, как вы запустите их в таком порядке, чтобы успешно переместить ваш файл в github.

Рвение Мурапа
источник
-2

git commitэто зафиксировать файлы, которые находятся в локальном репо. git pushэто быстрая перемотка слияния главной ветви локальной стороны с удаленной главной веткой. Но слияние не всегда будет успешным. Если появляется отказ, вы должны сделать pullтак, чтобы вы могли добиться успеха git push.

Маркус Торнтон
источник
Некоторые люди могут хотеть принудить толчок вместо тяги. Это зависит от ситуации. На самом деле, если вы перебазировали коммиты в ветке, которой вы не делитесь с другими людьми (даже в удаленном репо), то вытащить - это совсем не то, что вы хотите.