Основы Git: как не потеряться в истории коммитов и не сломать репозиторий


Git — это распределённая система контроля версий, которая позволяет отслеживать изменения в файлах и координировать работу над проектами. Она стала стандартом де-факто в разработке программного обеспечения, DevOps и даже в администрировании инфраструктуры (через инфраструктуру как код — IaC).

Если ты, как и я, любишь всё держать под контролем — включая свои конфиги, скрипты и домашние сервисы — Git станет твоим лучшим другом. В этой статье мы разберём основы Git так, чтобы ты мог уверенно использовать его уже сегодня, не боясь сломать что-то.


🔹 Что такое Git?

Git — это инструмент, созданный Линусом Торвальдсом в 2005 году для управления разработкой ядра Linux. Его ключевые особенности:

  • Распределённость: каждый участник имеет полную копию репозитория.
  • Высокая производительность: операции происходят локально.
  • Надёжность: данные шифруются хешами (SHA-1), что делает их практически неизменяемыми.
  • Гибкость: поддержка ветвления, слияния, перезаписи истории (с осторожностью!).

INFO

Официальный сайт Git: https://git-scm.com
Документация: https://git-scm.com/book/ru/v2


🔹 Установка Git

Git доступен в репозиториях всех популярных дистрибутивов Linux.

На Debian/Ubuntu:

sudo apt update && sudo apt install git -y

На RHEL/Fedora/CentOS:

# Для RHEL/CentOS
sudo yum install git
# Или на новых версиях:
sudo dnf install git

На Arch Linux:

sudo pacman -S git

Проверим установку:

git --version

🔹 Настройка Git

Первое, что нужно сделать после установки — задать имя пользователя и email. Эти данные будут использоваться в каждом коммите.

git config --global user.name "Иван Петров"
git config --global user.email "ivan@example.com"

NOTE

Флаг --global означает, что настройки применятся ко всем репозиториям на этом компьютере.
Чтобы изменить настройки только для одного проекта — опусти --global.

Также полезно задать редактор по умолчанию (на случай, если Git потребует ввести сообщение):

git config --global core.editor "nano"
# или
git config --global core.editor "vim"

Посмотреть все настройки:

git config --list

🔹 Основные понятия

ТерминОписание
Репозиторий (repo)Каталог, в котором Git отслеживает изменения
Коммит (commit)Снимок состояния файлов в определённый момент
Ветка (branch)Указатель на конкретный коммит. По умолчанию — main или master
HEADУказатель на текущий коммит (обычно — на ветку)
Staging area (index)Промежуточная зона, куда добавляются изменения перед коммитом
RemoteУдалённый репозиторий (например, на GitHub, GitLab)

🔹 Работа с репозиторием: пошагово

1. Инициализация репозитория

Создаём новый каталог и инициализируем Git:

mkdir my-project
cd my-project
git init

Это создаст скрытую папку .git — там хранится вся метаинформация.


2. Создание файла и добавление в индекс

echo "Привет, Git!" > hello.txt

Проверим статус:

git status

Вывод будет примерно такой:

На ветке main
Начальный коммит
Неотслеживаемые файлы:
  (используйте "git add <файл>...", чтобы добавить в то, что будет включено в коммит)
	hello.txt

Добавим файл в staging area:

git add hello.txt

Теперь файл готов к коммиту.

TIP

Чтобы добавить все файлы:
git add . — текущий каталог
git add * — все файлы (кроме скрытых)
git add -A — всё, включая удалённые


3. Создание коммита

git commit -m "Добавлен файл hello.txt"

Флаг -m — это сообщение коммита. Всегда пиши осмысленные сообщения!

WARNING

Плохое сообщение: fix, update, commited
Хорошее сообщение: docs: добавлено описание основ git


4. Просмотр истории

git log

Вывод:

commit abc123def456...
Author: Иван Петров <ivan@example.com>
Date:   Mon Apr 5 12:00:00 2025 +0300

    Добавлен файл hello.txt

Для краткого просмотра:

git log --oneline

🔹 Работа с ветками

Ветки позволяют изолировать разработку новых фич, не ломая основную.

Создание ветки:

git branch feature/greeting

Переключение на ветку:

git checkout feature/greeting

Или одной командой:

git checkout -b feature/greeting

INFO

В современных версиях Git можно использовать git switch:

git switch -c feature/greeting

Внесём изменения в ветке:

echo "Добро пожаловать в SelfOps!" >> hello.txt
git add hello.txt
git commit -m "feat: добавлено приветствие"

Слияние ветки в main

Сначала переключимся на main:

git checkout main

Теперь сольём ветку:

git merge feature/greeting

DANGER

Если были конфликты — Git остановит слияние и попросит их разрешить вручную.


🔹 Работа с удалённым репозиторием

Чаще всего используются GitHub, GitLab, Bitbucket или свой сервер (например, Gitea).

Добавление удалённого репозитория:

git remote add origin https://github.com/username/my-project.git

Отправка изменений на сервер:

git push -u origin main

Флаг -u связывает локальную ветку с удалённой, чтобы в будущем можно было просто писать git push.

Клонирование репозитория:

git clone https://github.com/username/my-project.git

🔹 Полезные команды

КомандаОписание
git statusПоказывает состояние рабочей директории
git diffПоказывает разницу между рабочей директорией и индексом
git diff --stagedРазница между индексом и последним коммитом
git log --oneline --graph --allКрасивая история всех веток
git reset <файл>Убрать файл из staging area
git restore <файл>Отменить изменения в рабочей директории
git rm <файл>Удалить файл и добавить в индекс
git mv old.txt new.txtПереименовать файл

🔹 Конфигурация .gitignore

Файл .gitignore позволяет указать, какие файлы не нужно отслеживать.

Пример:

# Логи
*.log
 
# Временные файлы
*.tmp
 
# Виртуальное окружение Python
venv/
__pycache__/
 
# Скрытые файлы ОС
.DS_Store
Thumbs.db

INFO

Шаблоны .gitignore для разных языков:
https://github.com/github/gitignore


🔹 Советы от SelfOps

  1. Коммить часто, пушь реже — маленькие, осмысленные коммиты легче откатывать.
  2. Используй ветки — даже для мелких правок.
  3. Пиши хорошие сообщения — они помогут тебе через полгода.
  4. Не коммить чувствительные данные — пароли, ключи, токены.
    Используй .env + .gitignore или секреты CI/CD.
  5. Регулярно пушь — вдруг сгорит диск?

TIP

Для управления секретами:


🔹 Где хранить свои репозитории?

Если ты сторонник self-hosting, вот отличные решения:

  • 🐙 Gitea — лёгкий Git-сервер на Go
  • 🐬 GitLab CE — мощный, но требует ресурсов
  • 🐱 Gogs — ещё проще, чем Gitea
  • 🧩 Forgejo — форк Codeberg, основанный на Gitea

EXAMPLE

Я, например, использую Gitea на своём сервере в домашней сети.
Это позволяет мне хранить compose файлы, скрипты, код и документацию в одном месте, с полным контролем.


🔹 Заключение

Git — это не просто инструмент, а культура работы с кодом и конфигурациями. Освоив основы, ты сможешь:

  • Отслеживать изменения в своих скриптах
  • Автоматизировать деплой через CI/CD
  • Совместно работать с другими
  • Развертывать инфраструктуру как код (Terraform, Ansible)

QUOTE

“Лучше потратить 10 минут на коммит, чем 10 часов на восстановление”
— Мудрый админ из будущего


🔗 Полезные ссылки


Шпаргалка по git

Базовые настройки

git config --global user.name "Lupa_Pupa" #задаем имя пользователя
git config --global user.email "mail@mail.ru" #задаем эл почту
git config --global credential.helper cache #кэшируем логины и пароли, что бы постоянно их не вводить

Подготовительный этап

cd project_folder #переходим в дирректорию проекта
git init #превращает папку проекта в локальный репозиторий
git remote add origin https://url_my_repo.ru #соединяем локальный репозиторий с удаленным
 
#также можно ознакомится:
git remote -v #отображает все удалённые подключения репозиториям
git remote show #получить дополнительные сведения об удалённом репозитории

Основная работа

git clone https://url_my_repo.ru #скачать все файлы из удаленнго репозитория
git status #посмотреть статус всех не сохраненных изменений в файлах репозитория
git add . #добавляет текущую папку в индекс git (подготовка к коммиту), выполняется всегда перед коммитом
git commit -m "short summary about the commit" #сохранить в истории git локально
git log #информация обо всех коммитах
git checkout {hash_commit} #вернуться к раннему коммиту
git push origin master #публикует коммиты из локального в привязанный удаленный репозиторий, в ветку master о всеми коммитами
git pull origin master #скачать из удаленного репозитория в локальный со всеми коммитами

Работа с ветками

git branch #посмотреть список всех локальных веток
git branch my_branch #создать ветку my_branch
git checkout my_branch #переключится на веткуmy_branch
git push origin my_branch #опубликовать в удаленный репозиторий изменения из ветки my_branch

Слияние веток

git checkout master #переходим в ту ветку, в которую будем сливать my_branch
git pull origin master #обновляем локальную ветку с сервера
git merge my_branch #слить ветку my_branch в текущую ветку(master) в виде одного коммита
 
#альтернатива merge это rebase
 
git rebase my_branch #слить ветку my_branch в текущую ветку(master) с переносом ввсех коммитов из my_branch в master

Вариант 2:

Работа над проектом основываясь на удалённом репозитории:

git clone <адрес_репозитория> #скачиваем удаленный репозиторий на локальную машину

Перед тем, как создавать новый функционал и новую ветку, стоит обновить master на вашем устройстве. Для этого нужно находиться в этой ветке и выполнить следующую команду:

git checkout master #переключаемся 
git pull origin master #подтягиваем изменения из удаленного репозитория

Вспомогательные команды

Просмотреть изменения относительно двух веток можно командой:

git diff <исходная_ветка> <целевая_ветка>

Удалить ненужную ветку:

git branch -d <название_ветки>
Просмотр историю ветки:

Подсказки по популярным командам:

# По популярным командам
git help
 
# Или по конкретной команде
git help <название_команды>
 
# Например clone
git help clone