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

Цикл работы

Здесь вы создадите свой первый репозиторий с SQL-запросом. Всё делаем локально, интернет не нужен.

Работа с Git — это повторение одного цикла:

изменить файл → git add → git commit → (повторить)

Три области, через которые проходит файл:

ОбластьЧто это
Рабочая папкаФайлы, которые вы правите
Индекс (staging)Изменения, которые вы выбрали для следующего коммита (git add)
ИсторияСохранённые коммиты (git commit)

Индекс нужен, чтобы вы сами решали, что попадёт в коммит. Правки в разных файлах можно разложить по разным коммитам.

Окно терминала
mkdir sql-reports
cd sql-reports
git init

git init создаёт скрытую папку .git. Теперь папка — репозиторий.

Создайте первый запрос:

Окно терминала
mkdir models
cat > models/revenue.sql <<'SQL'
select
order_id,
amount
from orders
SQL
Окно терминала
git status

Git покажет models/ в разделе Untracked files. Он видит файл, но не следит за ним.

Окно терминала
git add models/revenue.sql
git commit -m "Add revenue model"
  • git add кладёт файл в индекс.
  • git commit -m сохраняет снимок в историю. Сообщение в кавычках — это что вы сделали.

Пишите сообщения коротко и понятно: Filter completed orders, Fix refund join. Не пишите fix, update, asdf. Через месяц вы не поймёте, что это было.

Поправьте запрос: нужны только завершённые заказы.

Окно терминала
cat > models/revenue.sql <<'SQL'
select
order_id,
amount
from orders
where status = 'completed'
SQL
git diff

Строки с + добавлены. Строки с - удалены. Так же выглядит изменение на GitHub и GitLab, только в цвете:

Diff коммита на GitHub: сообщение коммита, автор, hash и строка, которая изменилась, красным и зелёным

Вверху — сообщение коммита, автор и hash. Ниже — diff каждого файла.

Сохраните:

Окно терминала
git add models/revenue.sql
git commit -m "Filter completed orders"

Короткая запись для уже отслеживаемых файлов: git commit -am "сообщение". Новые файлы она не берёт.

Окно терминала
git log --oneline
9d1f502 Filter completed orders
9a73738 Add revenue model

Это и есть замена revenue_v2.sql и revenue_v2_final.sql. Файл один. Версий две, и у каждой есть имя.

Посмотреть старую версию файла:

Окно терминала
git show HEAD~1:models/revenue.sql

HEAD — последний коммит. HEAD~1 — на один коммит раньше.

СитуацияКоманда
Испортил файл, ещё не сделал commit. Хочу вернуть как в последнем коммитеgit restore models/revenue.sql
Убрать файл из индекса, но оставить правкиgit restore --staged models/revenue.sql
Коммит уже сделан и отправлен коллегам. Хочу отменить егоgit revert <hash>

git revert не стирает историю. Он создаёт новый коммит, который отменяет старый. Это безопасный способ.


Создайте файл .gitignore в корне репозитория:

.env
*.duckdb
__pycache__/
.DS_Store

Теперь Git не будет предлагать эти файлы в git status. Сам .gitignore коммитят, чтобы он был у всей команды.

Окно терминала
git add .gitignore
git commit -m "Add .gitignore"
КомандаЧто делает
git initСоздаёт репозиторий
git statusПоказывает, что изменилось
git diffПоказывает изменения построчно
git add <файл>Выбирает изменения для коммита
git commit -m "..."Сохраняет версию
git log --onelineПоказывает историю
git restore <файл>Отменяет правки в файле
git revert <hash>Отменяет коммит новым коммитом

Создайте репозиторий sql-reports и сделайте два коммита: Add revenue model и Filter completed orders.

Проверка: git log --oneline показывает два коммита.

Решение

Команды из урока выше: git init, создать models/revenue.sql, git add, git commit, правка, снова git add и git commit.

Добавьте второй запрос models/refunds.sql. Сделайте для него отдельный коммит.

select
order_id,
amount
from refunds

Проверка: в git log --oneline три коммита. Последний про refunds.

Решение
Окно терминала
cat > models/refunds.sql <<'SQL'
select
order_id,
amount
from refunds
SQL
git add models/refunds.sql
git commit -m "Add refunds model"

Испортите models/revenue.sql: удалите всё содержимое файла. Не делайте commit. Верните файл.

Проверка: git status пишет nothing to commit, working tree clean.

Решение
Окно терминала
: > models/revenue.sql
git status
git restore models/revenue.sql
git status

Оказалось, что запрос refunds не нужен. Отмените коммит Add refunds model безопасным способом, без потери истории.

Проверка: в git log --oneline появился коммит Revert "Add refunds model". Файла models/refunds.sql больше нет.

Решение
Окно терминала
git log --oneline # найдите hash нужного коммита
git revert <hash>

Откроется редактор с сообщением. Сохраните и закройте. Для vim: :wq. Чтобы не открывать редактор: git revert --no-edit <hash>.

Создайте файл .env с текстом API_KEY=secret. Сделайте так, чтобы Git его не видел.

Проверка: git status не показывает .env.

Решение
Окно терминала
echo "API_KEY=secret" > .env
echo ".env" >> .gitignore
git status