Перейти к основному содержимому

Git — шпаргалка сценариев


Для кого эта статья

Статья для тех, кто ищет готовый пример и хочет понять, зачем каждая команда:

  • школьники и студенты — первая курсовая на GitHub, лабораторная, хакатон;
  • самоучки — pet-проект, портфолио, клон чужого репозитория;
  • стажёры — ежедневный цикл addcommitpush без страха терминала.

Здесь — сценарии с разбором. Полный курс, симптомы «сломалось» и справочник всех флагов — в энциклопедии 4.13 «Основы Git».

С чего начать в теории

Цепочка add → commit → push и четыре уровня хранения — Как работать с Git. Ветки и Pull Request — Ветвление и слияние. Интерактивный тренажёр — Learn Git Branching (на русском).


Четыре уровня — куда попадают ваши файлы

Git хранит проект слоями. Команды переносят изменения между ними.

УровеньГде этоПростыми словами
Рабочая папкафайлы в myapp/то, что вы правите в VS Code / PyCharm
Индекс (staging)внутри .git«корзина» перед снимком — что войдёт в коммит
Локальный репозиторийпапка .gitистория коммитов на вашем ПК
Удалённый репозиторийGitHub, GitLabкопия на сервере для сдачи и команды

Запомнить наизусть три шага сдачи работы: отредактировали файлы → git addgit commitgit 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-forwardPush отклонён
конфликт при mergeMerge и конфликт
отменить последний коммитReset
вернуть после reset --hardReflog
перенести один коммитCherry-pick
найти коммит, который всё сломалBisect
форк для open-sourceFork

Популярные запросы — короткий ответ и ссылка на разбор

Ниже — то, что чаще всего ищут в поиске. Полный код с таблицей «что делает каждая строка» — в разделе по ссылке.

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 с нуля

  1. Создайте пустой репозиторий на github.com/new (без README, если папка уже есть локально).
  2. В папке проекта — git init, add, commit, remote add, push — пошагово в разделе новый проект с нуля.
  3. Если нужен сайт-портфолио в интернете после 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 — конфликт слияния

Откройте файлы с &lt;&lt;&lt;&lt;&lt;&lt;<, выберите нужный код, удалите маркеры, затем 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 запомнит связь ветки

Построчный разбор

ШагКомандаСмысл
1mkdir / cdрабочая папка — здесь лежат исходники
2git initGit начинает отслеживать эту папку; появляется скрытый каталог .git
3git switch -c mainсоздать и перейти на ветку main
4echo … > READMEпример файла; у вас может быть main.py, index.html и т.д.
5git addвыбрать, что войдёт в следующий коммит
6git commit -m "…"сохранить снимок локально с сообщением
7remote add origin URLимя origin = «мой GitHub-репозиторий»
8push -u origin mainзагрузить ветку main на сервер; -u — чтобы потом хватало git push

Проверка: на GitHub в браузере видны файлы и коммит «Первый коммит».

Сайт на GitHub Pages после push

Если цель — портфолио или лендинг в интернете, одного push мало: нужны настройки Pages или workflow. Пошаговый кейс с HTTPS, Actions и доменом — Размещение своего сайта с GitHub Pages. Базовые команды push — в блоке выше.

Перед первым 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.

Частые ошибки:

  • забыли addcommit не включает новые файлы;
  • 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 filesGit видит файл впервые — нужен 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

  1. Откройте файлы с маркерами:
<<<<<<< HEAD
ваш код на main
=======
код из feature/lab-03
>>>>>>> feature/lab-03
  1. Вручную оставьте нужный итог (можно объединить обе части).
  2. Удалите строки &lt;&lt;&lt;&lt;&lt;&lt;<, =======, &gt;&gt;&gt;&gt;&gt;&gt;>.
  3. Завершите 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 -vURL 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
Сайт после pushGitHub Pages

12 команд «на каждый день» — 115#12-komand.

См. также

Другие статьи этого же раздела в боковом меню (как на странице "О разделе").

Освоение главы0%