Модуль 10 · Урок 37

Commits, branches і reviewable changesets

Git для QA — це не «зберегти файли», а створити точний, перевірений і відтворюваний changeset: знати стан working tree/index/HEAD, прочитати diff і прив’язати commit до risk та evidence.

Working treeIndexCommitBranch

Три стани змін

Working tree містить поточні файли, index (staging area) — snapshot, підготовлений до наступного commit, HEAD — поточний checked-out commit. `git status` показує tracked/untracked і різницю між цими станами; `git diff` читає unstaged changes, `git diff –cached` — staged changes.

Working treeЩо змінено локально, але ще не staged.
IndexТочний вміст майбутнього commit; його треба review окремо.
HEADCommit, від якого зараз відштовхується branch/working state.

`git add` — не просто «додати файл»

Команда переносить поточний file content у index. Після подальшого редагування staged і unstaged версії одного файла можуть відрізнятися.

Atomic changeset

Один commit має одну пояснювану мету, мінімальний scope і власний verification. Не змішуйте feature, formatting, dependency upgrade і випадкові generated files. Перед commit звірте status, unstaged diff, staged diff, whitespace check, tests і відсутність secrets/PII.

GateQA питання
ScopeКожний staged path потрібен requirement/defect?
BehaviorDiff змінює саме intended rule та failure paths?
EvidenceTests і manual observations відповідають exact staged snapshot?
SafetyНемає `.env`, ключів, dumps, customer data чи випадкових binaries?

Branches — pointers, не копії repository

Branch вказує на commit; HEAD вказує на поточну branch/commit. `git switch -c topic` створює topic branch. Switching змінює working tree під target commit і може бути заблокований, якщо local changes конфліктують. Перед switch зафіксуйте status і не ховайте незрозумілі зміни blanket stash/commit.

Практика

У disposable repository виконайте `git-safe-command-lab.md`, заповніть `commit-plan.csv` і `changeset-review.csv`. Commit SHA, staged diff і test result мають описувати один і той самий snapshot.

Ігнорування не видаляє history

`.gitignore` впливає на untracked paths, але не прибирає вже tracked secret або попередні commits. Якщо секрет потрапив у history — зупиніться, revoke/rotate його та дійте за incident process; не маскуйте проблему новим ignore rule.

Офіційні джерела

Практична перевірка · урок 37 з 44

Закріпіть матеріал уроку

Три сценарні питання. Для зарахування уроку потрібно дати щонайменше дві правильні відповіді.

1. Що показує git status?
2. Що показує git diff без аргументів?
3. Що треба review перед commit?