Run a project on GitLab — issues and quick actions, closing issues from commits and MRs, labels, milestones and boards, member roles, and protected branches.
Why: an issue is a tracked unit of work — a bug, a feature, a task — with its own discussion, assignee, and status. Quick actions are slash commands you type in any issue or MR comment; one line replaces five clicks. Note: create issues at Plan → Issues → New issue, or with (glab issue create).
Type quick actions in any issue or MR comment or description:
/assign @ada/label ~bug ~frontend/milestone %"v1.0"/due in 2 weeks/estimate 4h/closeWhy: linking code to the work it finishes keeps the tracker honest with zero effort — mention an issue number to connect them, or use a closing keyword and the issue closes itself when the change lands on main.
Mention an issue number anywhere in a commit message to link it
git commit -m "Refactor login validation (#12)"Closing keywords close the issue when the commit lands on main
git commit -m "Fix empty-password crash. Closes #12"They work in MR descriptions too: "Closes #12, #13" → both issues close when the MR merges
Why: labels are the categories you filter by (~bug, ~frontend), a milestone groups issues toward a deadline (v1.0), and a board shows issues as drag-and-drop cards — drag a card between columns and GitLab swaps its labels for you.
Labels = categories you filter by (Manage → Labels) Milestone = a deadline that groups issues (Plan → Milestones) Board = issues as drag-and-drop cards (Plan → Issue boards)
A common board: columns by workflow label Open → "in progress" → "in review" → Closed
Filter from the terminal too:
glab issue list --label bugglab issue list --milestone "v1.0"Why: every member gets a role that decides what they may touch, and main is a protected branch by default — the typical setup lets Developers merge through MRs while nobody pushes to main directly. Note: invite people at Manage → Members; adjust protections at Settings → Repository → Protected branches.
Each member gets a role — from least to most access:
Guest → see issues, leave comments
Reporter → read the code
Developer → push branches, open merge requests
Maintainer → merge to protected branches, change settings
Owner → everything, including deleting the projectmain is protected by default: direct pushes are blocked — changes arrive through MRs, and only Maintainers (or rules you set) can merge them