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

Ответ

git commit и git push — это последовательные этапы работы с Git, которые выполняют разные функции в локальном и удаленном контексте.

Основное различие

  • git commit — сохраняет изменения в локальном репозитории, создавая новый коммит с историей.
  • git push — отправляет локальные коммиты в удаленный репозиторий (GitHub, GitLab, Bitbucket).

Рабочий процесс

# 1. Подготовка изменений
git add index.html style.css

# 2. Фиксация в локальном репозитории
git commit -m "Добавлена главная страница и стили"
# ↑ Создан коммит с хешем, например: abc123
# ↑ Изменения сохранены только на вашем компьютере

# 3. Отправка в удаленный репозиторий
git push origin main
# ↑ Коммит abc123 теперь доступен другим разработчикам
# ↑ Изменения синхронизированы с сервером

Ключевые особенности

git commit:

  • Работает только с локальной историей
  • Можно делать множество коммитов без интернета
  • Можно изменять историю (git commit --amend, git rebase) до отправки
  • Каждый коммит имеет уникальный SHA-1 хеш

git push:

  • Требует подключения к удаленному репозиторию
  • Отправляет все новые коммиты из текущей ветки
  • Может быть отклонен, если есть конфликты с удаленной веткой
  • После отправки изменять историю опасно (требует --force с осторожностью)

Типичный сценарий

# Несколько локальных коммитов
git commit -m "Исправление бага #123"
git commit -m "Добавлены тесты"
git commit -m "Обновление документации"

# Одна отправка всех трех коммитов
git push origin feature-branch

Важно: git commit не требует сетевого подключения, в то время как git push зависит от доступности удаленного репозитория.

Ответ 18+ 🔞

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

Вот представь себе: ты — писатель-затворник, сидишь в своей избушке, пишешь гениальный роман. Так вот, git commit — это когда ты закрыл главу в своём блокноте, поставил дату и довольный пошёл спать. Всё, блядь, сохранено. Но только у тебя в столе. Никто в мире, кроме тебя и тараканов, этого не видел. Это твоя локальная победа.

А git push — это когда ты, наконец, вылез из берлоги, понёс свою рукопись в издательство (это типа GitHub или GitLab) и засунул её редактору в ящик со словами «на, читай, гений пришёл». Вот теперь твои коммиты — эти самые главы — стали удалёнными, доступными для всех. Коллеги могут начать орать, что у тебя сюжет хромает и главный герой — мудак.

Как это выглядит в жизни, без соплей:

# Ты допилил фичу, весь в поту и надежде.
git add super_cool_feature.js

# Ты зафиксировал это у себя, как факт. "Я это сделал, ёпта!"
git commit -m "Добавил супер-фичу, теперь всё летает"
# Всё. Ты молодец. Но только в своей вселенной.

# А теперь ты выходишь в мир и кричишь: "Смотрите, что я сделал, пидары!"
git push origin main
# Вот теперь все видят. И начинается: "чё за говнокод, блядь?"

Главные отличия, чтобы не путать:

  • git commit — это про тебя и твой комп. Можно делать хоть сто раз в день, без интернета, в пижаме. Можно даже потом стыдливо переписать историю (git commit --amend), если осознал, что написал хуйню, и никто не узнает. Магия, блядь.
  • git push — это про всех остальных. Нужен интернет. Отправляет на сервер всё, что ты накоммитил. После этого начинается политика: если ты попробуешь переписать историю (rebase), тебе придётся делать push --force, а это как прийти на общее собрание и заявить: "всё, что я говорил вчера — забудьте, я был не прав". На тебя сразу косо посмотрят.

Нормальный рабочий день:

# Утром: пофиксил баг.
git commit -m "Починил тот косяк с анимацией"
# Обед: добавил лого.
git commit -m "Подключил новую иконку"
# Вечер: поправил опечатки.
git commit -m "Исправил орфографию, а то стыдно"

# И перед уходом — БАХ! — одним махом выгружаешь всё это добро на сервер.
git push origin my-feature-branch

Запомни, чувак: коммит — это твой личный дневник успехов и косяков. Пуш — это когда ты этот дневник выкладываешь в общий чат на всеобщее обозрение. Сначала пиши в дневник, а уж потом решай, показывать его миру или нет. А то некоторые сразу пушут, а там одна строчка кода, и все думают — "и че это было, блядь?".