Git — шпаргалка сценариев
Для кого эта статья
Статья для тех, кто ищет готовый пример и хочет понять, зачем каждая команда:
- школьники и студенты — первая курсовая на GitHub, лабораторная, хакатон;
- самоучки — pet-проект, портфолио, клон чужого репозитория;
- стажёры — ежедневный цикл
add→commit→pushбез страха терминала.
Здесь — сценарии с разбором. Полный курс, симптомы «сломалось» и справочник всех флагов — в энциклопедии 4.13 «Основы Git».
Цепочка add → commit → push и четыре уровня хранения — Как работать с Git. Ветки и Pull Request — Ветвление и слияние. Интерактивный тренажёр — Learn Git Branching (на русском).
Четыре уровня — куда попадают ваши файлы
Git хранит проект слоями. Команды переносят изменения между ними.
| Уровень | Где это | Простыми словами |
|---|---|---|
| Рабочая папка | файлы в myapp/ | то, что вы правите в VS Code / PyCharm |
| Индекс (staging) | внутри .git | «корзина» перед снимком — что войдёт в коммит |
| Локальный репозиторий | папка .git | история коммитов на вашем ПК |
| Удалённый репозиторий | GitHub, GitLab | копия на сервере для сдачи и команды |
Запомнить наизусть три шага сдачи работы: отредактировали файлы → git add → git commit → git push.
Словарь на одну минуту
| Слово | Значение |
|---|---|
| Репозиторий (repo) | папка проекта + скрытая папка .git с историей |
| Коммит | сохранённый снимок проекта с сообщением |
| Ветка (branch) | отдельная линия истории, например main или feature/login |
main | главная ветка (раньше часто называли master) |
origin | стандартное имя ссылки на ваш репозиторий на GitHub |
HEAD | «где вы сейчас» — текущий коммит и ветка |
| PR (Pull Request) | запрос в веб-интерфейсе GitHub «влейте мои изменения» |
Диагностика — что выполнить первым делом
Перед любым «откатом» или reset всегда смотрите состояние.
git status
git log --oneline -10
Разбор
| Команда | Что покажет |
|---|---|
git status | текущая ветка; файлы изменены, в индексе (зелёные в некоторых IDE), не отслеживаются |
git log --oneline -10 | последние 10 коммитов — короткий хеш и сообщение |
Пример строки лога: a1b2c3d Добавить форму входа — a1b2c3d это сокращённый идентификатор коммита (хеш).
Если кажется, что коммиты «пропали» после reset или удаления ветки:
git reflog -20
reflog — журнал куда двигался HEAD на этом компьютере. По нему часто возвращают потерянную работу. Записи живут ограниченное время и не копируются при новом git clone на другом ПК.
Зоны риска (кратко)
| Зона | Ситуация | Можно ли переписывать историю |
|---|---|---|
| A | всё только у вас, ещё не push | да — amend, reset, rebase |
| B | ваша ветка на GitHub, общая main чистая | осторожно — push --force-with-lease по договорённости |
| C | уже влили в main / develop | лучше revert, новый коммит; force push — только по правилам команды |
Подробная схема — Типовые ситуации, зоны риска.
Индекс сценариев
| Ищете в Google / задача | Раздел |
|---|---|
| git commit пример / git add commit push | Популярные запросы |
| как создать репозиторий и залить на GitHub | Новый проект с нуля |
| git clone — скачать чужой проект | Клонирование |
| git add, commit, push по шагам | Ежедневный цикл |
как понять git status | Чтение status |
| отдельная ветка для задания | Ветка фичи |
| забыли файл в коммите | Amend |
отменить git add | Убрать из индекса |
| срочно переключить ветку | Stash |
push rejected, non-fast-forward | Push отклонён |
| конфликт при merge | Merge и конфликт |
| отменить последний коммит | Reset |
вернуть после reset --hard | Reflog |
| перенести один коммит | Cherry-pick |
| найти коммит, который всё сломал | Bisect |
| форк для open-source | Fork |
Популярные запросы — короткий ответ и ссылка на разбор
Ниже — то, что чаще всего ищут в поиске. Полный код с таблицей «что делает каждая строка» — в разделе по ссылке.
git add, git commit, git push — пример для начинающих
Типичная цепочка сдачи лабораторной:
git add .
git commit -m "Лаба 3 — график функции"
git push origin main
| Команда | Смысл в одной фразе |
|---|---|
git add | «Взять в корзину» файлы для следующего снимка |
git commit | сохранить снимок на вашем ПК с подписью |
git push | отправить коммиты на GitHub, чтобы их видел преподаватель |
Разбор всего дня разработки — ежедневный цикл. Теория четырёх уровней — Как работать с Git.
Как залить проект на GitHub с нуля
- Создайте пустой репозиторий на github.com/new (без README, если папка уже есть локально).
- В папке проекта —
git init,add,commit,remote add,push— пошагово в разделе новый проект с нуля. - Если нужен сайт-портфолио в интернете после push — кейс GitHub Pages (ветка
gh-pages, Actions, домен).
Альтернатива без терминала — GitHub Desktop, как в первой главе про Git.
git clone — скачать репозиторий с GitHub
git clone https://github.com/USER/repo.git
cd repo
Скачивается и история, и все файлы. Разбор — клонирование.
Ошибка при push (rejected, non-fast-forward)
Сначала подтяните изменения с сервера, потом снова push:
git pull --rebase origin имя-ветки
git push origin имя-ветки
Подробно — push отклонён и энциклопедия Типовые ситуации.
Как отменить последний коммит
| Цель | Команда |
|---|---|
| отменить коммит, код оставить | git reset --soft HEAD~1 |
| убрать коммит и из индекса | git reset HEAD~1 |
| всё откатить жёстко (осторожно) | git reset --hard HEAD~1 |
Таблица режимов и reflog — откат.
git merge — конфликт слияния
Откройте файлы с <<<<<<<, выберите нужный код, удалите маркеры, затем git add . и git commit. Пошагово — merge и конфликт, теория — Ветвление и слияние.
Новый проект с нуля
Когда нужно: вы написали проект в папке на диске и создали пустой репозиторий на GitHub (без README), нужно впервые отправить код.
mkdir myapp && cd myapp # папка проекта
git init # создать .git — репозиторий
git switch -c main # ветка main (если Git старый — git checkout -b main)
echo "# My App" > README.md # первый файл
git add README.md # положить файл в индекс (staging)
git commit -m "Первый коммит" # зафиксировать снимок локально
git remote add origin https://github.com/USER/myapp.git
git push -u origin main # отправить на GitHub; -u запомнит связь ветки
Построчный разбор
| Шаг | Команда | Смысл |
|---|---|---|
| 1 | mkdir / cd | рабочая папка — здесь лежат исходники |
| 2 | git init | Git начинает отслеживать эту папку; появляется скрытый каталог .git |
| 3 | git switch -c main | создать и перейти на ветку main |
| 4 | echo … > README | пример файла; у вас может быть main.py, index.html и т.д. |
| 5 | git add | выбрать, что войдёт в следующий коммит |
| 6 | git commit -m "…" | сохранить снимок локально с сообщением |
| 7 | remote add origin URL | имя origin = «мой GitHub-репозиторий» |
| 8 | push -u origin main | загрузить ветку main на сервер; -u — чтобы потом хватало git push |
Проверка: на GitHub в браузере видны файлы и коммит «Первый коммит».
Если цель — портфолио или лендинг в интернете, одного push мало: нужны настройки Pages или workflow. Пошаговый кейс с HTTPS, Actions и доменом — Размещение своего сайта с GitHub Pages. Базовые команды push — в блоке выше.
Добавьте .gitignore, чтобы в репозиторий не попали node_modules/, .env, pycache/, папки сборки. Шаблоны — лабораторные шаблоны, подробно — руководство .gitignore.
Частые ошибки:
remote origin already exists— репозиторий уже привязан; смотритеgit remote -v.failed to push/authentication failed— нужен Personal Access Token вместо пароля или SSH-ключ.- на GitHub при создании repo выбрали README — сначала
git pull origin main --rebase, потом push.
Клонирование чужого репозитория
Когда нужно: преподаватель дал ссылку, вы форкаете задание или клонируете open-source.
git clone https://github.com/ORG/repo.git
cd repo
git status
git switch main
git pull origin main
Построчный разбор
| Команда | Смысл |
|---|---|
git clone URL | скачать всю историю и рабочие файлы в папку repo |
cd repo | зайти в проект — дальше все команды из этой папки |
git status | убедиться, что репозиторий чистый или увидеть локальные правки |
git switch main | перейти на главную ветку (имя может быть master — смотрите README) |
git pull origin main | подтянуть последние коммиты с сервера |
Проверка: git log --oneline -3 — видны свежие коммиты с GitHub.
Ежедневный цикл
Когда нужно: каждый день — дописали код, нужно сохранить и отправить на GitHub (или GitLab).
git pull origin main
# … правки в редакторе …
git status
git diff
git add src/app.py
git commit -m "Исправить валидацию email в форме"
git push origin HEAD
Построчный разбор
| Команда | Смысл |
|---|---|
git pull origin main | забрать чужие коммиты с сервера и обновить файлы в папке (перед своей работой) |
git status | что изменено, что уже в индексе |
git diff | построчная разница в файлах, ещё не в индексе |
git add файл | подготовить файл к коммиту |
git commit -m "…" | зафиксировать индекс как новый коммит |
git push origin HEAD | отправить текущую ветку на origin |
HEAD — «где я сейчас»; для ветки feature/x push уйдёт в feature/x.
Совет для курсовых: сообщение коммита пишите по-русски или по-английски понятно преподавателю: «Лаба 3 — график функции», а не fix / update.
Частые ошибки:
- забыли
add—commitне включает новые файлы; pushбезcommit— на сервере ничего нового;pullво время незакоммиченных правок — Git может попросить commit или stash (см. ниже).
Как читать git status
Типичный вывод до add:
On branch main
Changes not staged for commit:
modified: src/app.py
Untracked files:
new_file.txt
| Фраза в выводе | Что делать |
|---|---|
Changes not staged | файл меняли, но ещё не git add |
Changes to be committed | файл в индексе — готов к commit |
Untracked files | Git видит файл впервые — нужен git add |
Your branch is ahead of 'origin/main' by 2 commits | локально 2 коммита, которых нет на GitHub — пора push |
Your branch is behind… | на сервере есть новое — нужен pull |
Короткий статус: git status -sb.
Ветка фичи для задания или функции
Когда нужно: в main должна оставаться рабочая версия, а лабораторная — в отдельной ветке; в команде — Pull Request.
git fetch origin
git switch main
git pull origin main
git switch -c feature/lab-03
# работа, git add, git commit …
git push -u origin feature/lab-03
Затем на GitHub: Compare & pull request → описание → Create pull request.
Построчный разбор
| Команда | Смысл |
|---|---|
git fetch origin | узнать, что нового на сервере, файлы в папке не менять |
git switch main + pull | обновить базу перед новой веткой |
git switch -c feature/lab-03 | создать ветку feature/lab-03 и перейти на неё |
push -u origin feature/lab-03 | выложить ветку на GitHub для сдачи / ревью |
После слияния PR в веб-интерфейсе локально:
git switch main
git pull origin main
git branch -d feature/lab-03
branch -d удаляет локальную ветку, если она уже влита.
Закоммитили прямо в main, а нужна была отдельная ветка — типовая ситуация 1141.
Коммиты и индекс
Дополнить последний коммит (amend)
Симптом: сделали commit, сразу увидели, что забыли файл или опечатку в сообщении. Условие: ещё не делали push (зона A).
git add forgotten.py
git commit --amend --no-edit
| Флаг | Смысл |
|---|---|
--amend | заменить последний коммит новым (тот же хеш исчезнет из истории) |
--no-edit | оставить старое сообщение коммита |
Новое сообщение:
git commit --amend -m "Лаба 2 — добавить тесты и README"
Проверка: git show HEAD --stat — список файлов в коммите.
Убрать файл из индекса (unstage)
Симптом: случайно git add . и в коммит попали лишние файлы.
git restore --staged path/to/file.ts
Файл остаётся изменённым на диске, из «корзины» перед коммитом убран.
Старый синоним: git reset HEAD path/to/file.ts.
Отменить правки в файле
Симптом: испортили файл и хотите вернуть версию из последнего коммита.
git restore path/to/file.ts
Правки в файле на диске пропадут. Несохранённое в редакторе тоже может быть потеряно — сначала сохраните копию, если сомневаетесь.
Часть файла в один коммит
git add -p path/to/file.ts
Git спросит по кускам (hunk): y — включить, n — пропустить, s — разбить кусок. Удобно, когда в одном файле и «фича», и мелкий рефакторинг.
Stash — временно спрятать правки
Когда нужно: нужно срочно переключиться на main, а текущие правки ещё не готовы к коммиту.
git stash push -m "WIP: половина лабы 4"
git switch main
# срочные правки на main…
git switch feature/lab-04
git stash list
git stash pop
Построчный разбор
| Команда | Смысл |
|---|---|
stash push -m "…" | спрятать незакоммиченное в «ящик» с подписью |
stash list | список ящиков: stash@{0}, stash@{1}… |
stash pop | применить верхний stash и удалить его из списка |
stash apply stash@{0} | применить, но оставить копию в списке |
Проверка: после pop снова git status — ваши правки снова в рабочей папке.
Push и pull
fetch и pull — в чём разница
| Команда | Файлы в папке | История на ПК |
|---|---|---|
git fetch origin | не меняются | обновляется знание о remote |
git pull origin main | меняются | fetch + слияние в текущую ветку |
Осторожный вариант перед pull:
git fetch origin
git log --oneline HEAD..origin/main
git merge origin/main
HEAD..origin/main — коммиты, которые есть на GitHub, но ещё нет у вас.
Push отклонён
Симптом в терминале: rejected, non-fast-forward, Updates were rejected.
Причина: на GitHub уже есть коммиты, которых нет у вас (кто-то запушил раньше, или вы пушили с другого ПК).
git fetch origin
git log --oneline HEAD..origin/имя-ветки
git pull --rebase origin имя-ветки
git push origin имя-ветки
Построчный разбор
| Шаг | Смысл |
|---|---|
fetch | скачать информацию о remote |
log HEAD..origin/ветка | посмотреть чужие коммиты |
pull --rebase | поставить ваши коммиты поверх свежих с сервера |
push | отправить обновлённую историю |
На общей ветке main в учебной группе согласуйте с одногруппниками. Подробнее — 1141.
Локальная ветка = как на сервере
Когда нужно: вы намудрили локально, на GitHub правильная версия, нужно выбросить лишние локальные коммиты.
git fetch origin
git switch имя-ветки
git reset --hard origin/имя-ветки
--hard сбрасывает и индекс, и файлы в папке к состоянию remote. Незакоммиченное пропадёт.
Merge и разрешение конфликта
Когда нужно: влить ветку feature/lab-03 в main (локально или после одобрения PR).
git switch main
git pull origin main
git merge feature/lab-03
Если конфликта нет — Git создаст merge-коммит (или fast-forward). Дальше:
git push origin main
Если Git пишет CONFLICT
- Откройте файлы с маркерами:
<<<<<<< HEAD
ваш код на main
=======
код из feature/lab-03
>>>>>>> feature/lab-03
- Вручную оставьте нужный итог (можно объединить обе части).
- Удалите строки
<<<<<<<,=======,>>>>>>>. - Завершите merge:
git add .
git commit
git push origin main
Смысл: git add говорит Git «конфликт в этом файле решён»; commit фиксирует слияние.
Схема трёхстороннего слияния — 113.
Откат (reset)
reset двигает указатель ветки на другой коммит. Три режима — главное для студентов:
| Команда | Коммит | Индекс (staging) | Файлы на диске |
|---|---|---|---|
git reset --soft HEAD~1 | откат на 1 назад | как после add | не трогает |
git reset --mixed HEAD~1 | откат | очищает | не трогает |
git reset --hard HEAD~1 | откат | очищает | откатывает |
HEAD~1 — «на один коммит назад». HEAD~2 — на два.
Отменить последний коммит, код оставить
git reset --soft HEAD~1
Все правки останутся в индексе — можно снова commit с другим сообщением.
Отменить коммит и убрать из индекса
git reset HEAD~1
Правки останутся в файлах, но как «не staged».
Восстановление через reflog
Когда нужно: после reset --hard пропали файлы или ветка.
git reflog
# найти строку ДО reset, скопировать хеш, например a1b2c3d
git reset --hard a1b2c3d
Пример строки reflog:
a1b2c3d HEAD@{1}: commit: Лаба 4 готова
Берёте хеш до ошибочной команды.
Подробный алгоритм — 1141 после reset --hard.
Отменить коммит, который уже на GitHub (общая ветка)
На main, куда уже пушили все, безопаснее не переписывать историю, а сделать обратный коммит:
git revert HEAD
git push origin main
revert создаёт новый коммит, который отменяет изменения предыдущего.
Rebase (ветка перед сдачей)
Когда нужно: в feature-ветке хотите «подтянуть» свежий main и история выглядела ровной линией.
git fetch origin
git switch feature/lab-03
git rebase origin/main
# при конфликте: правка файлов → git add → git rebase --continue
git push --force-with-lease origin feature/lab-03
| Команда | Смысл |
|---|---|
rebase origin/main | перенести ваши коммиты поверх актуального main |
rebase --continue | продолжить после исправления конфликта |
push --force-with-lease | перезаписать ветку на GitHub; отменится, если кто-то успел запушить в ту же ветку |
Rebase на общей main в учебном репозитории — только если преподаватель разрешил.
Cherry-pick
Когда нужно: один готовый коммит (например, исправление бага) перенести в другую ветку.
git switch main
git cherry-pick a1b2c3d
git push origin main
a1b2c3d — хеш из git log. Git применит изменения этого коммита поверх текущей ветки.
Bisect
Когда нужно: «вчера работало, сегодня нет» — найти коммит-виновник бинарным поиском.
git bisect start
git bisect bad
git bisect good v1.0.0
Git переключит репозиторий на средний коммит. Вы проверяете программу:
# если сломано:
git bisect bad
# если работает:
git bisect good
Повторяете, пока Git не назовёт первый плохой коммит. Завершение:
git bisect reset
На клоне с --depth 1 старых коммитов может не хватить — нужен полный git clone.
Fork и upstream
Когда нужно: вклад в чужой open-source — сначала форк на свой GitHub, потом PR в оригинал.
git clone https://github.com/ВАШ-ЛОГИН/react.git
cd react
git remote add upstream https://github.com/facebook/react.git
git fetch upstream
git switch -c fix-typo
# правки, add, commit
git push -u origin fix-typo
| Remote | Куда смотрит |
|---|---|
origin | ваш форк на GitHub |
upstream | оригинальный репозиторий |
Обновить свой main перед новой веткой:
git fetch upstream
git switch main
git merge upstream/main
git push origin main
Полезные команды — шпаргалка одной таблицей
| Команда | Зачем |
|---|---|
git status -sb | короткий статус + ветка |
git log --oneline --graph -15 | история «деревом» |
git diff | изменения не в индексе |
git diff --staged | что попадёт в следующий commit |
git branch -vv | ветки и их связь с remote |
git remote -v | URL origin и других |
git switch - | вернуться на предыдущую ветку |
Настройка Git один раз на компьютере
git config --global user.name "Иван Петров"
git config --global user.email "student@university.edu"
git config --global init.defaultBranch main
Без user.name и user.email Git не даст сделать commit.
Проверка:
git config --global --list
Частые вопросы (коротко)
Чем commit отличается от push?
commit сохраняет снимок только на вашем ПК. push отправляет коммиты на GitHub, чтобы их видели преподаватель и одногруппники.
Можно ли отменить push?
На учебном аккаунте проще сделать новый коммит с исправлением или revert. Переписывание истории на общей ветке — риск для всех.
Что такое .git?
Скрытая папка с историей. Её не удаляют и не заливают в zip на проверку вместо push — преподаватель ждёт ссылку на репозиторий.
Git и GitHub — одно и то же?
Git — программа на компьютере. GitHub — сайт, где хранят копию репозитория.
Куда читать дальше
| Тема | Статья |
|---|---|
| Симптом → пошаговое решение | Типовые ситуации 1141 |
| 12 команд и полный CLI | Шпаргалка 115 |
| Pull Request, конфликты | 113 |
Секреты, .env в репозитории | 1141, 116 |
| Сайт после push | GitHub Pages |
12 команд «на каждый день» — 115#12-komand.
См. также
Другие статьи этого же раздела в боковом меню (как на странице "О разделе"). Практическая карта типовых IT-задач: термины, пошаговое внедрение, проверка качества и типичные ошибки. Простой консольный чат на C# — учебное приложение с сокетами: TCP между клиентом и сервером, многопоточность и обмен сообщениями в консоли. Примеры вёрстки на HTML и CSS с разбором: центрирование, Flexbox, Grid, формы, шапка, подвал и адаптив для учебы и портфолио. Перед началом работы обязательно изучите главу Turtle . Галерея 3D-фигур на Panda3D — карточки, куб, пирамида, сфера, сетки и составные сцены; код для локального запуска. Готовые docker-compose.yml с разбором каждой строки — nginx, PostgreSQL, Redis, WordPress, MongoDB. Примеры для школьников и студентов: postgres example, поднять базу локально, app + db. Примеры nginx.conf для статики, reverse proxy, React/Vue SPA, PHP, SSL и балансировки — построчный разбор директив, проверка curl и типичные ошибки для лабораторных и VPS. dockerfile example — 10 готовых Dockerfile с построчным разбором: node, python, golang, react nginx, spring boot, php, dotnet. Для студентов, лабораторных и docker build с нуля. PromQL example — готовые запросы Prometheus и Grafana с построчным разбором: up, rate, node_exporter cpu, memory, disk, http_requests_total, histogram_quantile p99, алерты. Для студентов, лабораторных и devops docker compose. Готовые манифесты Kubernetes с разбором каждой строки — Pod, Deployment, Service, ConfigMap, Secret, Ingress. Примеры для Minikube, kind и kubectl apply. Примеры графиков Matplotlib на Python для школьников и студентов — sin, cos, парабола, столбцы, scatter, гистограмма, подграфики; код с подробным разбором. Примеры pandas на Python для школьников и студентов — DataFrame, фильтрация, groupby, очистка, merge, сводные таблицы и экспорт; код с подробным разбором каждой строки.Готовые решения
Простой консольный чат на CSharp
HTML + CSS — готовые макеты
Примеры фигур Turtle на Python
Примеры фигур Panda3D на Python
Docker Compose — готовые стеки
Nginx — конфиги под задачу
Dockerfile — 10 типовых образов
Prometheus + Grafana — запросы
Kubernetes YAML — минимальные манифесты
Matplotlib — графики
Pandas — типовые операции