REFERENCIA RÁPIDA DE GITHUB CLI
Repos, issues, PRs, actions, releases, API
Configuración
Instalación
| brew install gh | macOS con Homebrew |
| sudo apt install gh | Debian / Ubuntu |
| winget install GitHub.cli | Windows con winget |
| conda install gh | Con conda-forge |
Autenticación
gh auth login # login interactivo
gh auth login --with-token < token.txt
gh auth status # verificar estado de auth
gh auth refresh -s repo,gist # agregar scopes
Configuración
gh config set editor vim
gh config set pager less
gh config set git_protocol ssh
gh config list
Repos
Comandos de repositorio
gh repo create my-app --public --clone
gh repo clone owner/repo
gh repo fork owner/repo --clone
gh repo view owner/repo --web
Opciones de repo
| --public | --private | Establecer visibilidad del repositorio |
| --template owner/repo | Crear desde repositorio plantilla |
| --clone | Clonar después de crear |
| --add-readme | Inicializar con README |
| gh repo list owner | Listar repos de un propietario |
| gh repo delete owner/repo | Eliminar repositorio (con confirmación) |
| gh repo rename new-name | Renombrar repo actual |
| gh repo archive owner/repo | Archivar un repositorio |
Issues
Gestionar issues
gh issue create --title "Bug" --body "Details here"
gh issue list --state open --label bug
gh issue view 42
gh issue close 42 --reason completed
Opciones de issue
| --assignee @me | Asignar a ti mismo |
| --label bug,urgent | Agregar etiquetas |
| --milestone v2.0 | Establecer milestone |
| --project "Board" | Agregar a proyecto |
| gh issue edit 42 | Editar issue de forma interactiva |
| gh issue reopen 42 | Reabrir issue cerrado |
| gh issue comment 42 -b "msg" | Agregar comentario al issue |
| gh issue pin 42 | Fijar issue en el repo |
Pull Requests
Crear y gestionar PRs
gh pr create --title "feat: add auth" --body "..."
gh pr create --fill # título/body desde commits
gh pr list --state open
gh pr view 123 --web
Revisar y hacer merge
gh pr checkout 123 # obtener rama del PR
gh pr diff 123 # ver diff del PR
gh pr review 123 --approve
gh pr merge 123 --squash --delete-branch
Opciones de PR
| --draft | Crear como PR borrador |
| --reviewer user1,user2 | Solicitar revisores |
| --base main | Establecer rama base |
| --merge | --squash | --rebase | Estrategia de merge |
| --auto | Habilitar auto-merge cuando pasen los checks |
| --delete-branch | Eliminar rama tras el merge |
| gh pr ready 123 | Marcar PR borrador como listo |
Actions
Comandos de workflow
gh run list # ejecuciones recientes
gh run view 12345 # detalles de ejecución
gh run view 12345 --log-failed # logs de steps fallidos
gh run watch 12345 # estado en tiempo real
Activar y gestionar
gh workflow run deploy.yml --ref main
gh workflow list
gh workflow view deploy.yml
gh run rerun 12345 --failed # re-ejecutar jobs fallidos
Opciones de Actions
| -f key=value | Pasar entrada al workflow_dispatch |
| --json | Salida como JSON |
| -b branch | Filtrar por rama |
| gh run download 12345 | Descargar artefactos de la ejecución |
| gh cache list | Listar cachés de Actions |
| gh cache delete KEY | Eliminar una entrada de caché |
Releases
Gestionar releases
gh release create v1.0.0 --generate-notes
gh release create v1.0.0 ./dist/*.tar.gz
gh release list
gh release view v1.0.0
Opciones de release
| --title "Release v1.0" | Establecer título del release |
| --notes "Changelog here" | Establecer notas del release en línea |
| --notes-file CHANGELOG.md | Notas desde archivo |
| --generate-notes | Auto-generar desde commits |
| --draft | Crear como borrador |
| --prerelease | Marcar como pre-release |
| --latest | Marcar como último release |
| gh release download v1.0.0 | Descargar assets del release |
| gh release delete v1.0.0 | Eliminar un release |
| gh release edit v1.0.0 | Editar metadatos del release |
Gists
Comandos de gist
gh gist create file.py -d "My snippet"
gh gist create file1.js file2.js # gist de múltiples archivos
gh gist list
gh gist view
Opciones de gist
| -d "description" | Establecer descripción del gist |
| --public | Crear gist público (por defecto: secreto) |
| --web | Abrir gist en el navegador |
| gh gist edit <id> | Editar archivos del gist |
| gh gist clone <id> | Clonar gist localmente |
| gh gist delete <id> | Eliminar un gist |
API
Hacer llamadas a la API
gh api repos/owner/repo
gh api repos/owner/repo/issues --method POST \
-f title="Bug" -f body="Details"
gh api graphql -f query='{ viewer { login } }'
Formatear salida
gh api repos/owner/repo --jq '.stargazers_count'
gh api repos/owner/repo --template '{{.full_name}}'
gh pr list --json number,title --jq '.[].title'
Opciones de API
| --method GET|POST|PUT|DELETE | Método HTTP |
| -f key=value | Establecer campo de cadena |
| -F key=@file | Establecer campo desde archivo |
| --jq 'expression' | Filtrar JSON con sintaxis jq |
| --template 'tmpl' | Formatear con plantilla Go |
| --paginate | Obtener todas las páginas |
| -H 'Accept: ...' | Establecer cabecera personalizada |
Alias
Gestionar alias
gh alias set co 'pr checkout'
gh alias set bugs 'issue list --label bug'
gh alias set last 'run list -L 1'
gh alias list
Alias avanzados
# Alias con comando shell
gh alias set --shell pv 'gh pr view --json url --jq .url | pbcopy'
# Eliminar alias
gh alias delete co
Consejos sobre alias
| gh alias set name 'cmd' | Crear alias simple |
| --shell | El alias se ejecuta con shell (admite tuberías) |
| gh alias list | Mostrar todos los alias definidos |
| gh alias delete name | Eliminar un alias |
Patrones comunes
Flujo diario de trabajo
gh issue list --assignee @me # mis issues abiertos
gh pr status # PRs que necesitan atención
gh pr checks 123 # estado de CI para PR
gh run list -b main -L 5 # ejecuciones de CI recientes
Búsqueda
gh search repos --language rust --stars ">1000"
gh search issues --repo owner/repo "memory leak"
gh search prs --state open --review required
Flags útiles
| --json field1,field2 | Salida de campos específicos como JSON |
| --jq 'expr' | Filtrar salida JSON |
| -L N | Limitar resultados a N elementos |
| --web | Abrir resultado en el navegador |
| -R owner/repo | Apuntar a un repositorio específico |
| GH_TOKEN=xxx | Autenticar con variable de entorno |