Каждый, кто начинает учиться программированию, очень скоро слышит два слова: Git и GitHub. В вакансиях требование «умение работать с Git» тоже встречается почти всегда. В этом руководстве разберём, зачем нужен контроль версий, чем Git отличается от GitHub, как установить и настроить Git, какие у него основные понятия, как шаг за шагом создать первый репозиторий, отправить его на GitHub и забрать обратно, а также что такое ветки, Pull Request и конфликты. Затем поговорим о GitHub как портфолио, о правилах безопасности и о частых ошибках. В конце вас ждут практическое упражнение и чек-лист. Все команды настоящие — их можно сразу попробовать в терминале.
Зачем нужен контроль версий
Есть ли на вашем компьютере файлы вроде «kursovaya_final», «kursovaya_final_v2», «kursovaya_final_v2_samaya_poslednyaya»? Это очень распространённая проблема: непонятно, какая копия действительно последняя, что между ними изменилось и куда делся абзац, удалённый вчера. В статье о наведении порядка в файлах мы разбирали простые решения. Для кода и текстовых проектов есть инструмент мощнее — система контроля версий.
Система контроля версий запоминает каждое сохранённое состояние проекта: кто, когда, что и зачем изменил. В любой момент можно вернуться к прежнему состоянию, сравнить две версии или нескольким людям работать над одним проектом, не ломая работу друг друга.
Чем Git отличается от GitHub
Эти названия часто путают, но это разные вещи:
- Git — бесплатная программа, которая устанавливается на ваш компьютер. Она работает и без интернета и хранит историю проекта у вас локально.
- GitHub — веб-сервис для хранения Git-репозиториев в интернете и совместной работы над ними. Там можно просматривать и обсуждать код, работать в команде и даже размещать простой сайт.
Простое сравнение: Git — это фотоаппарат, а GitHub — онлайн-альбом, где снимки хранятся и которым можно делиться с друзьями. Без фотоаппарата альбом пуст, а без альбома снимки остаются на одном устройстве. GitHub — не единственный такой сервис: есть ещё GitLab и Bitbucket, но среди начинающих самый популярный именно GitHub.
Установка и первоначальная настройка
Скачайте Git с официального сайта — git-scm.com.
- Windows. Запустите установщик; для начала хватит стандартных настроек. После установки в меню «Пуск» появится Git Bash — команды из этой статьи вводите именно там.
- macOS. Введите в терминале
git --version. Если Git нет, система сама предложит установить нужные инструменты. - Linux (Ubuntu). Командой
sudo apt install git.
Проверьте установку и представьтесь. Имя и email записываются в каждый коммит, поэтому настройте их правильно один раз:
git --version
git config --global user.name "Bekzod Karimov"
git config --global user.email "bekzod@example.com"
git config --global init.defaultBranch main
Пояснение к последней строке. Раньше основная ветка по умолчанию называлась master. Сегодня GitHub и большинство проектов используют название main. С этой настройкой ваши новые репозитории сразу начинаются с main. Если в старых руководствах встретите master, это то же самое, просто старое название.
Основные понятия простым языком
Разберитесь в четырёх понятиях — и остальное в Git освоится легко.
- Репозиторий (repository, коротко repo) — папка проекта вместе со всей его историей. Снаружи это обычная папка, но внутри есть скрытая папка
.git— история хранится именно в ней. Не удаляйте её вручную. - Коммит (commit) — «снимок» проекта в определённый момент с короткой подписью. Похоже на точку сохранения в игре: ошиблись — вернулись к ней.
- Ветка (branch) — параллельная линия работы. Основная линия (
main) остаётся нетронутой, а новую идею вы пробуете в отдельной ветке. Понравился результат — добавляете в основную, не понравился — выбрасываете. - Удалённый репозиторий (remote) — копия в интернете, например репозиторий на GitHub. Обычно он называется
origin.
Ещё одна важная идея — индекс (staging area). Git не сохраняет автоматически всё, что изменилось. Сначала командой git add вы выбираете, какие изменения войдут в следующий коммит, а затем командой git commit делаете снимок. Как будто сначала складываете в сумку нужные вещи, а потом застёгиваете её.
Первый репозиторий: шаг за шагом
Бекзод — студент университета, пишет курсовую работу в текстовом файле формата Markdown. Он хочет сохранять состояние после каждой готовой главы. Пройдём его путь.
Шаг 1. Создать папку и инициализировать репозиторий.
mkdir kurs-ishi
cd kurs-ishi
git init
git init создаёт внутри папки пустой репозиторий. Для каждого проекта эту команду выполняют только один раз.
Шаг 2. Посмотреть состояние. Бекзод создаёт в папке файл hisobot.md и пишет введение. Затем:
git status
git status — самая частая команда. Она показывает, какие файлы новые, какие изменены и какие готовы к коммиту. Не знаете, что делать дальше, — сначала введите её.
Шаг 3. Подготовить изменение и сделать коммит.
git add hisobot.md
git commit -m "Kirish qismini yozish"
Чтобы добавить сразу все изменённые файлы, используют git add . (точка означает текущую папку). Но перед этим посмотрите через git status, что именно добавляется.
Шаг 4. Посмотреть историю.
git log --oneline
Каждый коммит показан одной строкой: короткий код (идентификатор) и подпись. Чтобы увидеть, что изменилось после последнего коммита, введите git diff.
Хорошее сообщение коммита
Сообщение коммита — это письмо себе в будущем или коллеге. «изменения», «поправил» или «asdf» ничего не говорят. Хорошее сообщение:
- короткое, примерно до 50 символов;
- говорит, что сделано: «Добавить список источников во 2-ю главу»;
- описывает одно логическое изменение — если сделаны две разные вещи, сделайте два коммита;
- в команде пишется на одном языке и в одном стиле.
Файл .gitignore
Некоторые файлы не должны попадать в репозиторий: временные файлы, системные файлы, папки с библиотеками и, главное, пароли и секретные ключи. Их перечисляют в файле .gitignore в корне проекта:
# пример файла .gitignore
.env
node_modules/
*.log
.DS_Store
Thumbs.db
Внимание: .gitignore действует только на файлы, которые Git ещё не отслеживает. Если файл уже попал в коммит, его нужно убрать из отслеживания командой git rm --cached имя_файла, а затем сделать коммит.
Работа с GitHub: push, clone, pull
Аккаунт и репозиторий
- Зарегистрируйтесь на github.com через Sign up. Имя пользователя выбирайте серьёзно — со временем оно станет адресом вашего портфолио.
- Нажмите + в правом верхнем углу и выберите New repository.
- Введите название (например,
kurs-ishi), выберите Public или Private. Если собираетесь загрузить репозиторий с компьютера, не ставьте галочку «Add a README file» — репозиторий должен быть пустым. - Нажмите Create repository. GitHub покажет адрес репозитория.
Связать компьютер с GitHub и отправить изменения
git remote add origin https://github.com/bekzod-karimov/kurs-ishi.git
git push -u origin main
git remote add регистрирует копию в интернете под именем origin. git push отправляет коммиты на GitHub, а -u запоминает связь, так что в следующий раз достаточно просто git push. Если ваша ветка всё ещё называется master, сначала переименуйте её: git branch -M main.
О входе: пароль от аккаунта GitHub в терминале не принимает. В Windows поставляемый вместе с Git менеджер учётных данных (Git Credential Manager) при первом push откроет окно браузера — войдите там. В других системах вместо пароля используют персональный токен (personal access token), который создаётся в настройках GitHub, или SSH-ключ.
Работа на другом компьютере: clone и pull
Бекзод хочет поработать в компьютерном классе университета. Он скачивает репозиторий вместе со всей историей:
git clone https://github.com/bekzod-karimov/kurs-ishi.git
Закончив, он делает git add, git commit и git push. Вернувшись домой, забирает новые изменения на домашний компьютер:
git pull
Золотое правило: перед началом работы — git pull, после окончания — git push.
Ветки, Pull Request и конфликты
Нилуфар и Жавлон вместе делают небольшой сайт для проекта в колледже. Нилуфар пишет страницу «О нас», Жавлон — форму обратной связи. Если оба будут работать прямо в main, они могут сломать работу друг друга. Поэтому каждый открывает свою ветку.
Работа с ветками
git switch -c biz-haqimizda
# редактируем файлы, затем:
git add .
git commit -m "Biz haqimizda sahifasini qo'shish"
git switch main
git merge biz-haqimizda
git switch -c создаёт новую ветку и переключается на неё. git switch main возвращает в основную ветку, а git merge вливает изменения из ветки в текущую. Список всех веток показывает git branch. В старых руководствах встречается git checkout -b — она тоже работает, но git switch понятнее.
Идея Pull Request
В команде ветки обычно сливают не на компьютере, а на GitHub. Нилуфар отправляет свою ветку командой git push -u origin biz-haqimizda и нажимает на GitHub кнопку Compare & pull request. Pull Request (PR) — это просьба: «посмотрите мои изменения и добавьте их в основную ветку». Жавлон просматривает изменения построчно, оставляет комментарии и при необходимости просит исправить. Если всё в порядке, нажимается Merge pull request. Так в main попадает только проверенный код.
Конфликт и как его разрешить
Если оба по-разному изменили одну и ту же строку одного файла, Git не может сам решить, какой вариант правильный, — это называется конфликтом. Это не ошибка, а обычная ситуация. Например, оба поменяли заголовок в index.html. При слиянии Git расставит в файле метки:
<<<<<<< HEAD
<h1>Kollej loyihasi</h1>
=======
<h1>Bizning jamoa sayti</h1>
>>>>>>> biz-haqimizda
От HEAD до ======= — вариант из текущей ветки, ниже — из вливаемой. Порядок действий:
- Откройте файл в редакторе и оставьте правильный вариант (или объедините оба).
- Удалите строки
<<<<<<<,=======и>>>>>>>. - Сохраните, затем выполните
git add index.htmlиgit commit.
Чтобы конфликтов было меньше, чаще делайте git pull, не держите ветки подолгу и договаривайтесь, кто над каким файлом работает.
GitHub как портфолио и безопасность
README и GitHub Pages
Работодатель часто открывает ссылку на GitHub из резюме. Добавляйте в каждый проект файл README.md: что делает проект, как его запустить, какие технологии использованы. Если создать репозиторий с тем же названием, что и ваше имя пользователя, и положить в него README, он появится на странице вашего профиля — это ваша короткая самопрезентация.
Мадина изучила основы HTML и CSS, сделала одностраничный сайт о себе и хочет выложить его в интернет. Для этого есть бесплатный сервис GitHub Pages:
- Она кладёт файл
index.htmlв корень репозитория и делаетgit push. - Открывает на GitHub раздел репозитория Settings → Pages.
- В Build and deployment → Source выбирает «Deploy from a branch», в Branch —
mainи/ (root), нажимает Save. - Через несколько минут сайт открывается по адресу
имя-пользователя.github.io/имя-репозитория.
Эту ссылку можно добавить в резюме и профиль LinkedIn. Подробные советы — в статье о создании портфолио.
Правила безопасности
- Никогда не загружайте в репозиторий пароли, токены и секретные ключи. Храните их в отдельном файле вроде
.envи добавьте его в.gitignore. - Если всё же загрузили — немедленно смените ключ. Удалить файл следующим коммитом недостаточно: он остаётся в истории, а открытые репозитории автоматически сканируют боты.
- Включите двухфакторную аутентификацию: Settings → Password and authentication. GitHub и сам всё чаще требует её от пользователей, которые загружают код.
- Осторожнее с личными данными: копий паспорта, списков телефонных номеров и чужих данных в открытом репозитории быть не должно.
Общие правила — в статье об онлайн-безопасности.
Графические инструменты
Терминал не обязателен. GitHub Desktop — бесплатная программа для Windows и macOS: коммиты, push, pull и ветки делаются кнопками. В редакторе VS Code раздел Source Control на левой панели показывает изменения и позволяет делать коммиты. И всё же основные команды полезно один раз освоить в терминале: графические программы выполняют именно их, и при проблеме вы будете понимать, что происходит.
Частые ошибки
- Всё в одном коммите. Неделя работы и один коммит «всё» делают историю бесполезной. Коммитьте после каждого логического шага.
- Загрузка секретного файла. Случайно добавить
.envили файл с паролями черезgit add .. Перед коммитом всегда смотритеgit status. - Сменить компьютер, не сделав push. Бекзод поработал в университете и забыл отправить изменения — дома его ждёт старая версия. Закончили —
git push, начали —git pull. - Удалить папку
.gitили вложить репозитории друг в друга. Вся история теряется или запутывается. - Испугаться конфликта и клонировать папку заново. Прочитать метки конфликта и разрешить его вручную — чаще всего дело одной минуты.
- Непонятные сообщения коммитов. «fix», «новое», «123» — через месяц вы и сами не поймёте, что имелось в виду.
Практическое упражнение и чек-лист
Закрепите изученное за час практики:
- Установите Git и настройте имя и email через
git config. - Создайте папку
mashqи выполнитеgit init. - Напишите в файле
README.md3–4 строки о себе и сделайте первый коммит. - Создайте
.gitignoreи добавьте в него.env. Создайте файл.envи убедитесь, что в выводеgit statusего нет. - Ещё дважды измените файл и сделайте коммиты с понятными сообщениями; посмотрите историю через
git log --oneline. - Создайте на GitHub пустой репозиторий и загрузите проект командами
git remote addиgit push -u origin main. - Откройте ветку
git switch -c tajriba, внесите изменение, сделайте коммит, вернитесь вmainи выполнитеgit merge. - Отредактируйте README на GitHub прямо в браузере, затем на компьютере выполните
git pull. - По желанию добавьте простой
index.htmlи включите GitHub Pages.
Чек-лист
- Git установлен, имя и email настроены, основная ветка —
main. - Коммиты небольшие, сообщения понятные.
- Есть
.gitignore, секретных файлов в репозитории нет. - В аккаунте GitHub включена двухфакторная аутентификация.
git pullв начале работы иgit pushв конце вошли в привычку.- В каждом открытом проекте есть понятный README.
Git — повседневный инструмент программиста, но он полезен и для текстовых документов, курсовых работ и сайтов. Если вы только думаете о том, чтобы начать программировать, привыкайте к Git с первых дней.
Если хотите системно изучать программирование с преподавателем, познакомьтесь с бесплатной программой по программированию и другими учебными программами нашей ассоциации. Когда будете готовы, оставьте заявку — наши специалисты свяжутся с вами.