Rules
- ALWAYS verify auth before first command:
glab auth status - ALWAYS use
-R owner/repowhen not inside the target git repo - For self-hosted GitLab, set
GITLAB_HOSTin the command environment when this installedglabdoes not support a global--hostnameflag. Checkglab <command> --helpbefore using--hostname; some versions accept--hostnamefor auth but not for MR commands. - Use
--output=jsonwhen parsing output programmatically - NEVER hardcode tokens in commands — use
glab auth loginorGITLAB_TOKENenv var - Pagination params go in URL, not flags:
glab api "projects/:id/jobs?per_page=100"(NOT--per-page) - When creating MRs, ALWAYS add
--remove-source-branch --squash-before-mergeunless the user explicitly says otherwise. - Some
glabversions do not support--hostnameon MR commands. For self-hosted GitLab operations, prefer running inside the target repo with the correct remote, or setGITLAB_HOST=<host>and use-R owner/repo.
Auth
glab auth login # Interactive
glab auth login --hostname gitlab.example.org # Self-hosted
glab auth status # Verify
MR Workflow
git push -u origin feature-branch
GITLAB_HOST=gitlab.paigod.work glab mr create -R owner/repo \
--source-branch feature-branch --target-branch main \
--title "Fix bug" --description "Closes #123" \
--remove-source-branch --squash-before-merge --yes
GITLAB_HOST=gitlab.paigod.work glab mr view 42 -R owner/repo --output=json
glab mr list --reviewer=@me # MRs to review
glab mr checkout 42 # Test locally
glab mr approve 42
glab mr merge 42 --remove-source-branch
Notes:
- Some
glabversions do not have--description-fileonmr create; use--description "$(cat /tmp/body.md)"if help confirms only--descriptionis available. - After creating an MR, verify
web_url,head_pipeline.status, conflicts, squash, and source-branch removal settings withglab mr view --output=json.
Issue Workflow
glab issue create --title "Bug" --label=bug --assignee=@me
glab issue list --assignee=@me
glab issue close 123 -m "Fixed in MR !42"
CI/CD
glab ci status # Current pipeline status
glab ci status --live # Watch until pipeline completes
glab pipeline ci view # Watch pipeline (interactive)
glab ci trace # View job logs
glab ci lint # Validate .gitlab-ci.yml
glab ci run # Trigger pipeline
glab ci retry # Retry failed pipeline
Wait for pipeline in scripts (glab has no built-in blocking wait):
while true; do
status=$(glab api "projects/:id/pipelines?ref=$(git branch --show-current)&per_page=1" \
| jq -r '.[0].status')
case "$status" in
success) echo "Pipeline passed"; break ;;
failed|canceled) echo "Pipeline $status"; exit 1 ;;
*) echo "Status: $status, waiting..."; sleep 15 ;;
esac
done
Auto-merge when pipeline succeeds:
glab mr merge <MR_ID> --when-pipeline-succeeds
API
glab api projects/:id/merge_requests
glab api --paginate "projects/:id/pipelines/123/jobs?per_page=100"
glab api --method POST projects/:id/issues --field title="Bug"
Quick Fixes
| Error | Fix |
|---|---|
401 Unauthorized |
glab auth login |
404 Project Not Found |
Check repo name + access permissions |
not a git repository |
cd to repo or use -R owner/repo |
source branch already has MR |
glab mr list to find existing |
| Multiple config files found and the first config lacks the self-hosted token | Retry with GLAB_CONFIG_DIR='<authenticated-config-dir>' GITLAB_HOST=<host> glab auth status; do not read or print token files just to diagnose config precedence. |
Direct local glab returns EOF/timeout for self-hosted GitLab but another trusted host can reach it |
Do not conclude MR is impossible. Push using SSH ProxyCommand through the reachable host when appropriate, or run GitLab REST API/glab from that host. Still verify MR URL, pipeline, mergeability, and discussions before marking complete. |
References
- references/commands.md — Full command reference (MR, Issue, CI/CD, Repo, API, Labels, Releases, Variables, etc.)
- references/pipeline-debug.md — Pipeline troubleshooting workflow, Job logs, retry/cancel, Artifacts, batch cleanup
- references/config.md — Authentication management, multiple instances, environment variables, configuration files, Shell completion, Aliases
- references/troubleshooting.md — Common errors and solutions for Auth, network, SSL, config