Git — это система контроля версий: программа, которая запоминает каждое сохранённое состояние вашего проекта и позволяет вернуться к любому из них. Без неё история проекта превращается в папку с файлами вроде проект_финал_v2_новый.zip. С Git у вас есть чистая история изменений, возможность безопасно экспериментировать и способ работать в команде. Ниже разберём главные понятия и пройдём весь путь на живом примере: от первого коммита до слияния веток.
Это четвёртая часть серии «База для программиста». В части 3 мы освоили терминал, он понадобится здесь: с Git работают именно через него.
Зачем Git нужен даже в учебном проекте
Многие новички откладывают Git «на потом, когда будет настоящая работа». На практике он полезен с первого дня по трём причинам.
- История изменений. Сломали программу и не помните, что меняли? Git покажет, что именно изменилось с последнего рабочего состояния, и позволит вернуться к нему.
- Безопасные эксперименты. Новую идею можно проверить в отдельной ветке и не бояться испортить рабочий код. Не получилось — ветку просто удаляют.
- Привычка, которую ждут работодатели. Git используют практически во всех командах разработки, а ссылка на репозиторий с учебными проектами — стандартная часть резюме джуниора.
Git и GitHub: в чём разница
Это самая частая путаница в начале.
- Git — программа, которая работает на вашем компьютере и хранит историю проекта локально. Для работы ей не нужен интернет.
- GitHub (а также GitLab, Bitbucket) — сайты-сервисы, где можно хранить копию репозитория в интернете, делиться кодом и работать над ним вместе.
Проще всего так: Git — это «история изменений», GitHub — «облако для этой истории». Использовать Git можно без GitHub, а вот GitHub без Git не обойдётся.
Три главных понятия: репозиторий, коммит, ветка
- Репозиторий — папка проекта, за которой следит Git. Внутри неё появляется скрытая папка
.git, где хранится вся история. - Коммит — сохранённый снимок проекта с коротким описанием. Это точка, к которой можно вернуться. У каждого коммита есть идентификатор, например
5bd6657. - Ветка — отдельная линия истории. Основная ветка обычно называется
main(в старых проектахmaster). От неё можно ответвиться, поработать над идеей и потом слить результат обратно.
Установка и первая настройка
Проверьте, есть ли Git на компьютере:
git --version
Если команда не найдена, установите его:
- Windows: скачайте установщик с сайта git-scm.com.
- macOS: выполните
git --versionв терминале, система сама предложит установить инструменты разработчика. Другой вариант —brew install git. - Linux (Ubuntu, Debian):
sudo apt install git.
Один раз представьтесь, чтобы Git подписывал ваши коммиты:
git config --global user.name "Анна Иванова"
git config --global user.email "anna@example.com"
Как устроена работа с Git: три зоны
Чтобы понимать команды, запомните схему. Изменения в файлах проходят три зоны:
- Рабочая папка — ваши файлы в том виде, в каком вы их правите.
- Индекс (staging area) — «корзина» для коммита: сюда вы кладёте только те изменения, которые хотите сохранить. Команда
git add. - Репозиторий — готовая история. Сюда изменения попадают командой
git commit.
Такое разделение позволяет собрать в один коммит именно то, что относится к одной задаче, даже если вы успели поправить в проекте и другие вещи.
Практика: первый репозиторий и первые коммиты
Все команды ниже я выполнил в Git версии 2.43, и выводы взяты из реального запуска. Название ветки по умолчанию зависит от настроек: если у вас вместо main показывается master, всё работает так же.
Создайте папку и репозиторий:
mkdir git-practice
cd git-practice
git init -b main
Git ответит:
Initialized empty Git repository in /home/anna/git-practice/.git/
(Путь у вас будет свой.) Создайте файл и посмотрите состояние:
echo "Привет, Git!" > hello.txt
git status
On branch main
No commits yet
Untracked files:
(use "git add <file>..." to include in what will be committed)
hello.txt
nothing added to commit but untracked files present (use "git add" to track)
Git говорит: файл hello.txt есть, но он «неотслеживаемый». Добавьте его в индекс и сделайте первый коммит:
git add hello.txt
git commit -m "Добавить hello.txt"
[main (root-commit) 2fa4a0e] Добавить hello.txt
1 file changed, 1 insertion(+)
create mode 100644 hello.txt
Теперь допишите в файл вторую строку и посмотрите, что изменилось:
echo "Вторая строка" >> hello.txt
git diff
diff --git a/hello.txt b/hello.txt
index bf1302d..8d55612 100644
--- a/hello.txt
+++ b/hello.txt
@@ -1 +1,2 @@
Привет, Git!
+Вторая строка
Строка с плюсом — добавленная. Сохраните изменение вторым коммитом и посмотрите историю:
git commit -am "Добавить вторую строку"
git log --oneline
5bd6657 Добавить вторую строку
2fa4a0e Добавить hello.txt
Флаг -a в git commit -am автоматически добавляет в коммит все изменения в уже отслеживаемых файлах. Для новых файлов по-прежнему нужен git add.

Ветки: как экспериментировать без страха
Допустим, вы хотите попробовать рискованную идею. Создайте для неё ветку и сразу перейдите в неё:
git switch -c eksperiment
Switched to a new branch 'eksperiment'
Внесите правку и сохраните её коммитом, затем вернитесь в основную ветку и слейте результат:
echo "Рискованная правка" >> hello.txt
git commit -am "Эксперимент"
git switch main
git merge eksperiment
[eksperiment c6ea990] Эксперимент
1 file changed, 1 insertion(+)
Switched to branch 'main'
Updating 5bd6657..c6ea990
Fast-forward
hello.txt | 1 +
1 file changed, 1 insertion(+)
Слово Fast-forward значит, что в main за это время ничего нового не появилось, и Git просто «перемотал» её вперёд до последнего коммита ветки.

Если эксперимент не удался, ветку можно удалить командой git branch -d eksperiment (или -D, если она не была слита), и основная история останется нетронутой.
Если же в двух ветках изменили одну и ту же строку, при слиянии возникнет конфликт. Это нормальная ситуация, не ошибка: Git отметит спорные места в файле, а вы решите, какой вариант оставить, и завершите слияние коммитом. Подробно конфликты мы разбирать не будем, но знать, что они бывают и их можно исправить, полезно заранее.
Как отменить изменения
Это самое частое, ради чего новичку нужен Git.
| Ситуация | Команда | Что делает |
|---|---|---|
| Хочу посмотреть, что изменилось | git diff |
Показывает правки, которые ещё не в индексе |
| Убрал файл из индекса по ошибке | git restore --staged файл |
Возвращает файл из индекса в рабочую папку, правки остаются |
| Хочу выбросить правки в файле | git restore файл |
Возвращает файл к состоянию последнего коммита. Несохранённые правки пропадут безвозвратно |
| Хочу отменить уже сделанный коммит | git revert идентификатор |
Создаёт новый коммит, который отменяет указанный. История не переписывается |
| Хочу вернуться посмотреть старое состояние | git switch --detach идентификатор |
Временно переходит на старый коммит, вернуться можно через git switch main |
Коммит — это страховка: то, что закоммичено, найти и вернуть почти всегда можно. А вот то, что не было закоммичено, git restore удалит без возможности восстановления.
Что не нужно хранить в Git
- Пароли, ключи API, токены. Если секрет попал в историю, удалить его оттуда сложно, а если репозиторий публичный, ключ нужно считать скомпрометированным.
- Тяжёлые и временные файлы: папки
node_modules, виртуальные окружения Python, скомпилированные файлы, архивы.
Чтобы Git игнорировал такие файлы, создайте в корне проекта файл .gitignore и перечислите в нём имена и маски, например:
node_modules/
.env
*.log
Типичные ошибки новичков
- Коммит «fix» или «правки». Через неделю по такой истории ничего не понять. Пишите, что изменилось и зачем: «Добавить проверку пустого поля формы».
- Один огромный коммит раз в неделю. Чем меньше и осмысленнее коммиты, тем проще искать причину ошибки и откатывать изменения.
- Забыли
git add. Новый файл не попал в коммит, потому что вы его не добавили. Перед коммитом проверяйтеgit status. git add .вслепую. Эта команда добавляет в индекс всё подряд, включая файлы с секретами. Сначала посмотритеgit status.- Работа прямо в
main. Для учебных проектов терпимо, для командной работы нет. Привыкайте создавать ветку под каждую задачу. - Застряли в текстовом редакторе после
git commitбез-m. Git открывает редактор (чаще vim или nano), и многие не знают, как из него выйти. В vim нажмитеEsc, затем введите:wqи Enter, чтобы сохранить, или:q!, чтобы выйти без сохранения. В nano —Ctrl+O, Enter, затемCtrl+X.
Мини-упражнение
- Создайте папку
git-practice, перейдите в неё и выполнитеgit init -b main. - Создайте файл
notes.txtс любой строкой и сделайте первый коммит. - Добавьте ещё две строки двумя отдельными коммитами с понятными сообщениями.
- Посмотрите историю командой
git log --oneline. - Создайте ветку
idea, добавьте в ней строку и сделайте коммит. - Вернитесь в
mainи слейте веткуidea. - Измените файл, не коммитя изменение, и верните его в прежнее состояние командой
git restore notes.txt.
Если всё получилось, вы прошли базовый рабочий цикл Git, на котором строится почти вся ежедневная работа разработчика.
Что дальше
Когда с локальным Git всё понятно, следующий шаг — выложить репозиторий на GitHub, но об этом мы подробно поговорим в части про первый pet-проект. Пока же в следующей части серии разберём алгоритмы и структуры данных, которые действительно нужны новичку. <!-- добавить ссылку на часть 5 после публикации -->
Если вы выбираете курс по программированию, программы обучения собраны в каталоге MAXCOURSE. Все части серии доступны по тегу baza-programmista.
Частые вопросы
Нужен ли Git, если я работаю над проектом один?
Да. Он страхует от потери работы, позволяет откатить неудачные правки и хранит историю, по которой видно, как развивался проект.
Чем Git отличается от GitHub?
Git — программа для хранения истории на вашем компьютере, GitHub — сайт, где можно держать удалённую копию репозитория и делиться кодом. Git работает без GitHub, но не наоборот.
Нужно ли запоминать все команды Git?
Нет. На старте хватает около десяти: init, status, add, commit, log, diff, switch, merge, restore, revert. Остальные ищутся в документации по мере необходимости.
Что делать, если я случайно удалил файл?
Если файл был закоммичен, верните его командой git restore имя_файла. Если он никогда не попадал в коммит, Git восстановить его не сможет, поэтому коммитьте чаще.
Можно ли пользоваться Git без терминала?
Можно: есть графические программы (GitHub Desktop, встроенные инструменты VS Code). Но они повторяют те же понятия, поэтому сначала стоит разобраться в командах и схеме работы.
Актуальность: для Git версии 2.43