GitHub CLI (gh)
Référence complète pour GitHub CLI (gh) - travaillez sans interruption avec GitHub depuis la ligne de commande.
Version : 2.85.0 (à jour en janvier 2026)
Prérequis
Installation
# macOS
brew install gh
# Linux
curl -fsSL https://cli.github.com/packages/githubcli-archive-keyring.gpg | sudo dd of=/usr/share/keyrings/githubcli-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/githubcli-archive-keyring.gpg] https://cli.github.com/packages stable main" | sudo tee /etc/apt/sources.list.d/github-cli.list > /dev/null
sudo apt update
sudo apt install gh
# Windows
winget install --id GitHub.cli
# Vérifier l'installation
gh --version
Authentification
# Connexion interactive (par défaut: github.com)
gh auth login
# Connexion avec un nom d'hôte spécifique
gh auth login --hostname enterprise.internal
# Connexion avec token
gh auth login --with-token < mytoken.txt
# Vérifier l'état de l'authentification
gh auth status
# Basculer entre les comptes
gh auth switch --hostname github.com --user username
# Déconnexion
gh auth logout --hostname github.com --user username
Configuration de l'intégration Git
# Configurer git pour utiliser gh comme gestionnaire d'authentifiants
gh auth setup-git
# Afficher le token actif
gh auth token
# Actualiser les permissions d'authentification
gh auth refresh --scopes write:org,read:public_key
Structure CLI
gh # Commande racine
├── auth # Authentification
│ ├── login
│ ├── logout
│ ├── refresh
│ ├── setup-git
│ ├── status
│ ├── switch
│ └── token
├── browse # Ouvrir dans le navigateur
├── codespace # GitHub Codespaces
│ ├── code
│ ├── cp
│ ├── create
│ ├── delete
│ ├── edit
│ ├── jupyter
│ ├── list
│ ├── logs
│ ├── ports
│ ├── rebuild
│ ├── ssh
│ ├── stop
│ └── view
├── gist # Gists
│ ├── clone
│ ├── create
│ ├── delete
│ ├── edit
│ ├── list
│ ├── rename
│ └── view
├── issue # Problèmes
│ ├── create
│ ├── list
│ ├── status
│ ├── close
│ ├── comment
│ ├── delete
│ ├── develop
│ ├── edit
│ ├── lock
│ ├── pin
│ ├── reopen
│ ├── transfer
│ ├── unlock
│ └── view
├── org # Organizations
│ └── list
├── pr # Demandes de tirage
│ ├── create
│ ├── list
│ ├── status
│ ├── checkout
│ ├── checks
│ ├── close
│ ├── comment
│ ├── diff
│ ├── edit
│ ├── lock
│ ├── merge
│ ├── ready
│ ├── reopen
│ ├── revert
│ ├── review
│ ├── unlock
│ ├── update-branch
│ └── view
├── project # Projects
│ ├── close
│ ├── copy
│ ├── create
│ ├── delete
│ ├── edit
│ ├── field-create
│ ├── field-delete
│ ├── field-list
│ ├── item-add
│ ├── item-archive
│ ├── item-create
│ ├── item-delete
│ ├── item-edit
│ ├── item-list
│ ├── link
│ ├── list
│ ├── mark-template
│ ├── unlink
│ └── view
├── release # Versions
│ ├── create
│ ├── list
│ ├── delete
│ ├── delete-asset
│ ├── download
│ ├── edit
│ ├── upload
│ ├── verify
│ ├── verify-asset
│ └── view
├── repo # Dépôts
│ ├── create
│ ├── list
│ ├── archive
│ ├── autolink
│ ├── clone
│ ├── delete
│ ├── deploy-key
│ ├── edit
│ ├── fork
│ ├── gitignore
│ ├── license
│ ├── rename
│ ├── set-default
│ ├── sync
│ ├── unarchive
│ └── view
├── cache # Caches Actions
│ ├── delete
│ └── list
├── run # Exécutions de workflow
│ ├── cancel
│ ├── delete
│ ├── download
│ ├── list
│ ├── rerun
│ ├── view
│ └── watch
├── workflow # Workflows
│ ├── disable
│ ├── enable
│ ├── list
│ ├── run
│ └── view
├── agent-task # Tâches d'agent
├── alias # Alias de commandes
│ ├── delete
│ ├── import
│ ├── list
│ └── set
├── api # Requêtes API
├── attestation # Attestations d'artefact
│ ├── download
│ ├── trusted-root
│ └── verify
├── completion # Complément de shell
├── config # Configuration
│ ├── clear-cache
│ ├── get
│ ├── list
│ └── set
├── extension # Extensions
│ ├── browse
│ ├── create
│ ├── exec
│ ├── install
│ ├── list
│ ├── remove
│ ├── search
│ └── upgrade
├── gpg-key # Clés GPG
│ ├── add
│ ├── delete
│ └── list
├── label # Étiquettes
│ ├── clone
│ ├── create
│ ├── delete
│ ├── edit
│ └── list
├── preview # Fonctionnalités en avant-première
├── ruleset # Ensemble de règles
│ ├── check
│ ├── list
│ └── view
├── search # Recherche
│ ├── code
│ ├── commits
│ ├── issues
│ ├── prs
│ └── repos
├── secret # Secrets
│ ├── delete
│ ├── list
│ └── set
├── ssh-key # Clés SSH
│ ├── add
│ ├── delete
│ └── list
├── status # Aperçu du statut
└── variable # Variables
├── delete
├── get
├── list
└── set
Configuration
Configuration globale
# Lister toute la configuration
gh config list
# Obtenir une valeur de configuration spécifique
gh config list git_protocol
gh config get editor
# Définir une valeur de configuration
gh config set editor vim
gh config set git_protocol ssh
gh config set prompt disabled
gh config set pager "less -R"
# Effacer le cache de configuration
gh config clear-cache
Variables d'environnement
# Token GitHub (pour l'automatisation)
export GH_TOKEN=ghp_xxxxxxxxxxxx
# Nom d'hôte GitHub
export GH_HOST=github.com
# Désactiver les invites
export GH_PROMPT_DISABLED=true
# Éditeur personnalisé
export GH_EDITOR=vim
# Pagineur personnalisé
export GH_PAGER=less
# Délai d'attente HTTP
export GH_TIMEOUT=30
# Dépôt personnalisé (remplace la valeur par défaut)
export GH_REPO=owner/repo
# Protocole git personnalisé
export GH_ENTERPRISE_HOSTNAME=hostname
Authentification (gh auth)
Connexion
# Connexion interactive
gh auth login
# Authentification basée sur le web
gh auth login --web
# Avec presse-papiers pour le code OAuth
gh auth login --web --clipboard
# Avec un protocole git spécifique
gh auth login --git-protocol ssh
# Avec un nom d'hôte personnalisé (GitHub Enterprise)
gh auth login --hostname enterprise.internal
# Connexion avec token depuis stdin
gh auth login --with-token < token.txt
# Stockage non sécurisé (texte brut)
gh auth login --insecure-storage
Statut
# Afficher l'état de l'authentification pour tous les comptes
gh auth status
# Afficher uniquement le compte actif
gh auth status --active
# Afficher l'état pour un nom d'hôte spécifique
gh auth status --hostname github.com
# Afficher le token en sortie
gh auth status --show-token
# Sortie JSON
gh auth status --json hosts
# Filtrer avec jq
gh auth status --json hosts --jq '.hosts | add'
Basculer entre les comptes
# Basculement interactif
gh auth switch
# Basculer vers un utilisateur/hôte spécifique
gh auth switch --hostname github.com --user monalisa
Token
# Afficher le token d'authentification
gh auth token
# Token pour un hôte/utilisateur spécifique
gh auth token --hostname github.com --user monalisa
Actualiser
# Actualiser les authentifiants
gh auth refresh
# Ajouter des permissions
gh auth refresh --scopes write:org,read:public_key
# Supprimer les permissions
gh auth refresh --remove-scopes delete_repo
# Réinitialiser aux permissions par défaut
gh auth refresh --reset-scopes
# Avec presse-papiers
gh auth refresh --clipboard
Configuration Git
# Configurer le gestionnaire d'authentifiants git
gh auth setup-git
# Configuration pour un hôte spécifique
gh auth setup-git --hostname enterprise.internal
# Forcer la configuration même si l'hôte n'est pas connu
gh auth setup-git --hostname enterprise.internal --force
Browse (gh browse)
# Ouvrir le dépôt dans le navigateur
gh browse
# Ouvrir un chemin spécifique
gh browse script/
gh browse main.go:312
# Ouvrir un problème ou une demande de tirage
gh browse 123
# Ouvrir un commit
gh browse 77507cd94ccafcf568f8560cfecde965fcfa63
# Ouvrir avec une branche spécifique
gh browse main.go --branch bug-fix
# Ouvrir un dépôt différent
gh browse --repo owner/repo
# Ouvrir des pages spécifiques
gh browse --actions # Onglet Actions
gh browse --projects # Onglet Projects
gh browse --releases # Onglet Releases
gh browse --settings # Page Paramètres
gh browse --wiki # Page Wiki
# Afficher l'URL au lieu d'ouvrir
gh browse --no-browser
Dépôts (gh repo)
Créer un dépôt
# Créer un nouveau dépôt
gh repo create my-repo
# Créer avec une description
gh repo create my-repo --description "Mon super projet"
# Créer un dépôt public
gh repo create my-repo --public
# Créer un dépôt privé
gh repo create my-repo --private
# Créer avec une page d'accueil
gh repo create my-repo --homepage https://example.com
# Créer avec une licence
gh repo create my-repo --license mit
# Créer avec un gitignore
gh repo create my-repo --gitignore python
# Initialiser en tant que dépôt template
gh repo create my-repo --template
# Créer un dépôt dans une organisation
gh repo create org/my-repo
# Créer sans cloner localement
gh repo create my-repo --source=.
# Désactiver les problèmes
gh repo create my-repo --disable-issues
# Désactiver le wiki
gh repo create my-repo --disable-wiki
Cloner un dépôt
# Cloner un dépôt
gh repo clone owner/repo
# Cloner dans un répertoire spécifique
gh repo clone owner/repo my-directory
# Cloner avec une branche différente
gh repo clone owner/repo --branch develop
Lister les dépôts
# Lister tous les dépôts
gh repo list
# Lister les dépôts d'un propriétaire
gh repo list owner
# Limiter les résultats
gh repo list --limit 50
# Dépôts publics uniquement
gh repo list --public
# Dépôts source uniquement (pas des forks)
gh repo list --source
# Sortie JSON
gh repo list --json name,visibility,owner
# Sortie tableau
gh repo list --limit 100 | tail -n +2
# Filtrer avec jq
gh repo list --json name --jq '.[].name'
Afficher un dépôt
# Afficher les détails du dépôt
gh repo view
# Afficher un dépôt spécifique
gh repo view owner/repo
# Sortie JSON
gh repo view --json name,description,defaultBranchRef
# Afficher dans le navigateur
gh repo view --web
Modifier un dépôt
# Modifier la description
gh repo edit --description "Nouvelle description"
# Définir la page d'accueil
gh repo edit --homepage https://example.com
# Modifier la visibilité
gh repo edit --visibility private
gh repo edit --visibility public
# Activer/désactiver les fonctionnalités
gh repo edit --enable-issues
gh repo edit --disable-issues
gh repo edit --enable-wiki
gh repo edit --disable-wiki
gh repo edit --enable-projects
gh repo edit --disable-projects
# Définir la branche par défaut
gh repo edit --default-branch main
# Renommer le dépôt
gh repo rename new-name
# Archiver un dépôt
gh repo archive
gh repo unarchive
Supprimer un dépôt
# Supprimer un dépôt
gh repo delete owner/repo
# Confirmer sans invite
gh repo delete owner/repo --yes
Fork un dépôt
# Fork un dépôt
gh repo fork owner/repo
# Fork vers une organisation
gh repo fork owner/repo --org org-name
# Cloner après le fork
gh repo fork owner/repo --clone
# Nom de remote pour le fork
gh repo fork owner/repo --remote-name upstream
Synchroniser un fork
# Synchroniser le fork avec upstream
gh repo sync
# Synchroniser une branche spécifique
gh repo sync --branch feature
# Synchronisation forcée
gh repo sync --force
Définir le dépôt par défaut
# Définir le dépôt par défaut pour le répertoire courant
gh repo set-default
# Définir le dépôt par défaut explicitement
gh repo set-default owner/repo
# Annuler la définition par défaut
gh repo set-default --unset
Liaisons automatiques de dépôt
# Lister les liaisons automatiques
gh repo autolink list
# Ajouter une liaison automatique
gh repo autolink add \
--key-prefix JIRA- \
--url-template https://jira.example.com/browse/<num>
# Supprimer une liaison automatique
gh repo autolink delete 12345
Clés de déploiement de dépôt
# Lister les clés de déploiement
gh repo deploy-key list
# Ajouter une clé de déploiement
gh repo deploy-key add ~/.ssh/id_rsa.pub \
--title "Serveur de production" \
--read-only
# Supprimer une clé de déploiement
gh repo deploy-key delete 12345
Gitignore et Licence
# Afficher le template gitignore
gh repo gitignore
# Afficher le template de licence
gh repo license mit
# Licence avec nom complet
gh repo license mit --fullname "John Doe"
Problèmes (gh issue)
Créer un problème
# Créer un problème interactivement
gh issue create
# Créer avec un titre
gh issue create --title "Bug : La connexion ne fonctionne pas"
# Créer avec un titre et un corps
gh issue create \
--title "Bug : La connexion ne fonctionne pas" \
--body "Étapes pour reproduire..."
# Créer avec le corps d'un fichier
gh issue create --body-file issue.md
# Créer avec des étiquettes
gh issue create --title "Corriger un bug" --labels bug,high-priority
# Créer avec des assignés
gh issue create --title "Corriger un bug" --assignee user1,user2
# Créer dans un dépôt spécifique
gh issue create --repo owner/repo --title "Titre du problème"
# Créer un problème à partir du web
gh issue create --web
Lister les problèmes
# Lister tous les problèmes ouverts
gh issue list
# Lister tous les problèmes (y compris fermés)
gh issue list --state all
# Lister les problèmes fermés
gh issue list --state closed
# Limiter les résultats
gh issue list --limit 50
# Filtrer par assigné
gh issue list --assignee username
gh issue list --assignee @me
# Filtrer par étiquettes
gh issue list --labels bug,enhancement
# Filtrer par milestone
gh issue list --milestone "v1.0"
# Recherche/filtrage
gh issue list --search "is:open is:issue label:bug"
# Sortie JSON
gh issue list --json number,title,state,author
# Vue tableau
gh issue list --json number,title,labels --jq '.[] | [.number, .title, .labels[].name] | @tsv'
# Afficher le nombre de commentaires
gh issue list --json number,title,comments --jq '.[] | [.number, .title, .comments]'
# Trier par
gh issue list --sort created --order desc
Afficher un problème
# Afficher un problème
gh issue view 123
# Afficher avec des commentaires
gh issue view 123 --comments
# Afficher dans le navigateur
gh issue view 123 --web
# Sortie JSON
gh issue view 123 --json title,body,state,labels,comments
# Afficher les champs spécifiques
gh issue view 123 --json title --jq '.title'
Modifier un problème
# Modifier interactivement
gh issue edit 123
# Modifier le titre
gh issue edit 123 --title "Nouveau titre"
# Modifier le corps
gh issue edit 123 --body "Nouvelle description"
# Ajouter des étiquettes
gh issue edit 123 --add-label bug,high-priority
# Supprimer les étiquettes
gh issue edit 123 --remove-label stale
# Ajouter des assignés
gh issue edit 123 --add-assignee user1,user2
# Supprimer les assignés
gh issue edit 123 --remove-assignee user1
# Définir le milestone
gh issue edit 123 --milestone "v1.0"
Fermer/Réouvrir un problème
# Fermer un problème
gh issue close 123
# Fermer avec un commentaire
gh issue close 123 --comment "Corrigé dans la PR #456"
# Rouvrir un problème
gh issue reopen 123
Commenter un problème
# Ajouter un commentaire
gh issue comment 123 --body "Cela semble bon !"
# Modifier un commentaire
gh issue comment 123 --edit 456789 --body "Commentaire mis à jour"
# Supprimer un commentaire
gh issue comment 123 --delete 456789
Statut du problème
# Afficher le résumé du statut du problème
gh issue status
# Statut pour un dépôt spécifique
gh issue status --repo owner/repo
Épingler/Dépingler des problèmes
# Épingler un problème (épinglé au tableau de bord du dépôt)
gh issue pin 123
# Dépingler un problème
gh issue unpin 123
Verrouiller/Déverrouiller un problème
# Verrouiller la conversation
gh issue lock 123
# Verrouiller avec une raison
gh issue lock 123 --reason off-topic
# Déverrouiller
gh issue unlock 123
Transférer un problème
# Transférer vers un autre dépôt
gh issue transfer 123 --repo owner/new-repo
Supprimer un problème
# Supprimer un problème
gh issue delete 123
# Confirmer sans invite
gh issue delete 123 --yes
Développer un problème (PR brouillon)
# Créer une PR brouillon à partir d'un problème
gh issue develop 123
# Créer dans une branche spécifique
gh issue develop 123 --branch fix/issue-123
# Créer avec une branche de base
gh issue develop 123 --base main
Demandes de tirage (gh pr)
Créer une demande de tirage
# Créer une PR interactivement
gh pr create
# Créer avec un titre
gh pr create --title "Fonctionnalité : Ajouter une nouvelle fonctionnalité"
# Créer avec un titre et un corps
gh pr create \
--title "Fonctionnalité : Ajouter une nouvelle fonctionnalité" \
--body "Cette PR ajoute..."
# Remplir le corps à partir d'un template
gh pr create --body-file .github/PULL_REQUEST_TEMPLATE.md
# Définir la branche de base
gh pr create --base main
# Définir la branche head (par défaut: branche actuelle)
gh pr create --head feature-branch
# Créer une PR brouillon
gh pr create --draft
# Ajouter des assignés
gh pr create --assignee user1,user2
# Ajouter des relecteurs
gh pr create --reviewer user1,user2
# Ajouter des étiquettes
gh pr create --labels enhancement,feature
# Lier à un problème
gh pr create --issue 123
# Créer dans un dépôt spécifique
gh pr create --repo owner/repo
# Ouvrir dans le navigateur après la création
gh pr create --web
Lister les demandes de tirage
# Lister les PR ouvertes
gh pr list
# Lister toutes les PR
gh pr list --state all
# Lister les PR fusionnées
gh pr list --state merged
# Lister les PR fermées (non fusionnées)
gh pr list --state closed
# Filtrer par branche head
gh pr list --head feature-branch
# Filtrer par branche de base
gh pr list --base main
# Filtrer par auteur
gh pr list --author username
gh pr list --author @me
# Filtrer par assigné
gh pr list --assignee username
# Filtrer par étiquettes
gh pr list --labels bug,enhancement
# Limiter les résultats
gh pr list --limit 50
# Recherche
gh pr list --search "is:open is:pr label:review-required"
# Sortie JSON
gh pr list --json number,title,state,author,headRefName
# Afficher le statut des vérifications
gh pr list --json number,title,statusCheckRollup --jq '.[] | [.number, .title, .statusCheckRollup[]?.status]'
# Trier par
gh pr list --sort created --order desc
Afficher une demande de tirage
# Afficher une PR
gh pr view 123
# Afficher avec des commentaires
gh pr view 123 --comments
# Afficher dans le navigateur
gh pr view 123 --web
# Sortie JSON
gh pr view 123 --json title,body,state,author,commits,files
# Afficher la différence
gh pr view 123 --json files --jq '.files[].path'
# Afficher avec une requête jq
gh pr view 123 --json title,state --jq '"\(.title): \(.state)"'
Vérifier une demande de tirage
# Vérifier la branche de la PR
gh pr checkout 123
# Vérifier avec un nom de branche spécifique
gh pr checkout 123 --branch name-123
# Forcer la vérification
gh pr checkout 123 --force
Diff d'une demande de tirage
# Afficher la différence de la PR
gh pr diff 123
# Afficher la différence avec couleur
gh pr diff 123 --color always
# Sortie dans un fichier
gh pr diff 123 > pr-123.patch
# Afficher la différence des fichiers spécifiques
gh pr diff 123 --name-only
Fusionner une demande de tirage
# Fusionner une PR
gh pr merge 123
# Fusionner avec une méthode spécifique
gh pr merge 123 --merge
gh pr merge 123 --squash
gh pr merge 123 --rebase
# Supprimer la branche après la fusion
gh pr merge 123 --delete-branch
# Fusionner avec un commentaire
gh pr merge 123 --subject "Fusionner PR #123" --body "Fusion de la fonctionnalité"
# Fusionner une PR brouillon
gh pr merge 123 --admin
# Forcer la fusion (ignorer les vérifications)
gh pr merge 123 --admin
Fermer une demande de tirage
# Fermer une PR (en tant que brouillon, pas fusion)
gh pr close 123
# Fermer avec un commentaire
gh pr close 123 --comment "Fermeture en raison de..."
Réouvrir une demande de tirage
# Rouvrir une PR fermée
gh pr reopen 123
Modifier une demande de tirage
# Modifier interactivement
gh pr edit 123
# Modifier le titre
gh pr edit 123 --title "Nouveau titre"
# Modifier le corps
gh pr edit 123 --body "Nouvelle description"
# Ajouter des étiquettes
gh pr edit 123 --add-label bug,enhancement
# Supprimer les étiquettes
gh pr edit 123 --remove-label stale
# Ajouter des assignés
gh pr edit 123 --add-assignee user1,user2
# Supprimer les assignés
gh pr edit 123 --remove-assignee user1
# Ajouter des relecteurs
gh pr edit 123 --add-reviewer user1,user2
# Supprimer les relecteurs
gh pr edit 123 --remove-reviewer user1
# Marquer comme prêt pour la relecture
gh pr edit 123 --ready
Prêt pour la relecture
# Marquer une PR brouillon comme prête
gh pr ready 123
Vérifications de demande de tirage
# Afficher les vérifications de la PR
gh pr checks 123
# Surveiller les vérifications en temps réel
gh pr checks 123 --watch
# Intervalle de surveillance (secondes)
gh pr checks 123 --watch --interval 5
Commenter une demande de tirage
# Ajouter un commentaire
gh pr comment 123 --body "Semble bon !"
# Commenter sur une ligne spécifique
gh pr comment 123 --body "Corriger ceci" \
--repo owner/repo \
--head-owner owner --head-branch feature
# Modifier un commentaire
gh pr comment 123 --edit 456789 --body "Mise à jour"
# Supprimer un commentaire
gh pr comment 123 --delete 456789
Relire une demande de tirage
# Relire la PR (ouvre l'éditeur)
gh pr review 123
# Approuver la PR
gh pr review 123 --approve --body "LGTM !"
# Demander des modifications
gh pr review 123 --request-changes \
--body "Veuillez corriger ces problèmes"
# Commenter sur la PR
gh pr review 123 --comment --body "Quelques remarques..."
# Rejeter la relecture
gh pr review 123 --dismiss
Mettre à jour la branche
# Mettre à jour la branche de la PR avec la dernière branche de base
gh pr update-branch 123
# Forcer la mise à jour
gh pr update-branch 123 --force
# Utiliser la stratégie de fusion
gh pr update-branch 123 --merge
Verrouiller/Déverrouiller une demande de tirage
# Verrouiller la conversation de la PR
gh pr lock 123
# Verrouiller avec une raison
gh pr lock 123 --reason off-topic
# Déverrouiller
gh pr unlock 123
Annuler une demande de tirage
# Annuler une PR fusionnée
gh pr revert 123
# Annuler avec un nom de branche spécifique
gh pr revert 123 --branch revert-pr-123
Statut de demande de tirage
# Afficher le résumé du statut de la PR
gh pr status
# Statut pour un dépôt spécifique
gh pr status --repo owner/repo
GitHub Actions
Exécutions de workflow (gh run)
# Lister les exécutions de workflow
gh run list
# Lister pour un workflow spécifique
gh run list --workflow "ci.yml"
# Lister pour une branche spécifique
gh run list --branch main
# Limiter les résultats
gh run list --limit 20
# Sortie JSON
gh run list --json databaseId,status,conclusion,headBranch
# Afficher les détails d'une exécution
gh run view 123456789
# Afficher une exécution avec les journaux détaillés
gh run view 123456789 --log
# Afficher un travail spécifique
gh run view 123456789 --job 987654321
# Afficher dans le navigateur
gh run view 123456789 --web
# Surveiller l'exécution en temps réel
gh run watch 123456789
# Surveiller avec un intervalle
gh run watch 123456789 --interval 5
# Réexécuter une exécution échouée
gh run rerun 123456789
# Réexécuter un travail spécifique
gh run rerun 123456789 --job 987654321
# Annuler une exécution
gh run cancel 123456789
# Supprimer une exécution
gh run delete 123456789
# Télécharger les artefacts de l'exécution
gh run download 123456789
# Télécharger un artefact spécifique
gh run download 123456789 --name build
# Télécharger dans un répertoire
gh run download 123456789 --dir ./artifacts
Workflows (gh workflow)
# Lister les workflows
gh workflow list
# Afficher les détails du workflow
gh workflow view ci.yml
# Afficher le YAML du workflow
gh workflow view ci.yml --yaml
# Afficher dans le navigateur
gh workflow view ci.yml --web
# Activer le workflow
gh workflow enable ci.yml
# Désactiver le workflow
gh workflow disable ci.yml
# Exécuter le workflow manuellement
gh workflow run ci.yml
# Exécuter avec des entrées
gh workflow run ci.yml \
--raw-field \
version="1.0.0" \
environment="production"
# Exécuter à partir d'une branche spécifique
gh workflow run ci.yml --ref develop
Caches Actions (gh cache)
# Lister les caches
gh cache list
# Lister pour une branche spécifique
gh cache list --branch main
# Lister avec une limite
gh cache list --limit 50
# Supprimer le cache
gh cache delete 123456789
# Supprimer tous les caches
gh cache delete --all
Secrets Actions (gh secret)
# Lister les secrets
gh secret list
# Définir le secret (invite la valeur)
gh secret set MY_SECRET
# Définir le secret à partir de l'environnement
echo "$MY_SECRET" | gh secret set MY_SECRET
# Définir le secret pour un environnement spécifique
gh secret set MY_SECRET --env production
# Définir le secret pour une organisation
gh secret set MY_SECRET --org orgname
# Supprimer le secret
gh secret delete MY_SECRET
# Supprimer de l'environnement
gh secret delete MY_SECRET --env production
Variables Actions (gh variable)
# Lister les variables
gh variable list
# Définir la variable
gh variable set MY_VAR "some-value"
# Définir la variable pour un environnement
gh variable set MY_VAR "value" --env production
# Définir la variable pour une organisation
gh variable set MY_VAR "value" --org orgname
# Obtenir la valeur de la variable
gh variable get MY_VAR
# Supprimer la variable
gh variable delete MY_VAR
# Supprimer de l'environnement
gh variable delete MY_VAR --env production
Projets (gh project)
# Lister les projets
gh project list
# Lister pour un propriétaire
gh project list --owner owner
# Projets ouverts
gh project list --open
# Afficher le projet
gh project view 123
# Afficher les éléments du projet
gh project view 123 --format json
# Créer un projet
gh project create --title "Mon Projet"
# Créer dans une organisation
gh project create --title "Projet" --org orgname
# Créer avec un fichier Readme
gh project create --title "Projet" --readme "Description ici"
# Modifier le projet
gh project edit 123 --title "Nouveau titre"
# Supprimer le projet
gh project delete 123
# Fermer le projet
gh project close 123
# Copier le projet
gh project copy 123 --owner target-owner --title "Copie"
# Marquer comme template
gh project mark-template 123
# Lister les champs
gh project field-list 123
# Créer un champ
gh project field-create 123 --title "Statut" --datatype single_select
# Supprimer le champ
gh project field-delete 123 --id 456
# Lister les éléments
gh project item-list 123
# Créer un élément
gh project item-create 123 --title "Nouvel élément"
# Ajouter un élément au projet
gh project item-add 123 --owner-owner --repo repo --issue 456
# Modifier un élément
gh project item-edit 123 --id 456 --title "Titre mis à jour"
# Supprimer un élément
gh project item-delete 123 --id 456
# Archiver un élément
gh project item-archive 123 --id 456
# Lier les éléments
gh project link 123 --id 456 --link-id 789
# Délier les éléments
gh project unlink 123 --id 456 --link-id 789
# Afficher le projet dans le navigateur
gh project view 123 --web
Versions (gh release)
# Lister les versions
gh release list
# Afficher la dernière version
gh release view
# Afficher une version spécifique
gh release view v1.0.0
# Afficher dans le navigateur
gh release view v1.0.0 --web
# Créer une version
gh release create v1.0.0 \
--notes "Notes de version ici"
# Créer une version avec notes depuis un fichier
gh release create v1.0.0 --notes-file notes.md
# Créer une version avec une cible
gh release create v1.0.0 --target main
# Créer une version en tant que brouillon
gh release create v1.0.0 --draft
# Créer une version préalable
gh release create v1.0.0 --prerelease
# Créer une version avec un titre
gh release create v1.0.0 --title "Version 1.0.0"
# Télécharger l'actif de la version
gh release upload v1.0.0 ./file.tar.gz
# Télécharger plusieurs actifs
gh release upload v1.0.0 ./file1.tar.gz ./file2.tar.gz
# Télécharger avec une étiquette (sensible à la casse)
gh release upload v1.0.0 ./file.tar.gz --casing
# Supprimer une version
gh release delete v1.0.0
# Supprimer avec nettoyage de tag
gh release delete v1.0.0 --yes
# Supprimer un actif spécifique
gh release delete-asset v1.0.0 file.tar.gz
# Télécharger les actifs de la version
gh release download v1.0.0
# Télécharger un actif spécifique
gh release download v1.0.0 --pattern "*.tar.gz"
# Télécharger dans un répertoire
gh release download v1.0.0 --dir ./downloads
# Télécharger l'archive (zip/tar)
gh release download v1.0.0 --archive zip
# Modifier la version
gh release edit v1.0.0 --notes "Notes mises à jour"
# Vérifier la signature de la version
gh release verify v1.0.0
# Vérifier un actif spécifique
gh release verify-asset v1.0.0 file.tar.gz
Gists (gh gist)
# Lister les gists
gh gist list
# Lister tous les gists (y compris privés)
gh gist list --public
# Limiter les résultats
gh gist list --limit 20
# Afficher un gist
gh gist view abc123
# Afficher les fichiers du gist
gh gist view abc123 --files
# Créer un gist
gh gist create script.py
# Créer un gist avec une description
gh gist create script.py --desc "Mon script"
# Créer un gist public
gh gist create script.py --public
# Créer un gist multi-fichier
gh gist create file1.py file2.py
# Créer à partir de stdin
echo "print('hello')" | gh gist create
# Modifier un gist
gh gist edit abc123
# Supprimer un gist
gh gist delete abc123
# Renommer le fichier du gist
gh gist rename abc123 --filename old.py new.py
# Cloner un gist
gh gist clone abc123
# Cloner dans un répertoire
gh gist clone abc123 my-directory
Codespaces (gh codespace)
# Lister les codespaces
gh codespace list
# Créer un codespace
gh codespace create
# Créer avec un dépôt spécifique
gh codespace create --repo owner/repo
# Créer avec une branche
gh codespace create --branch develop
# Créer avec une machine spécifique
gh codespace create --machine premiumLinux
# Afficher les détails du codespace
gh codespace view
# Se connecter en SSH au codespace
gh codespace ssh
# Se connecter en SSH avec une commande spécifique
gh codespace ssh --command "cd /workspaces && ls"
# Ouvrir le codespace dans le navigateur
gh codespace code
# Ouvrir dans VS Code
gh codespace code --codec
# Ouvrir avec un chemin spécifique
gh codespace code --path /workspaces/repo
# Arrêter le codespace
gh codespace stop
# Supprimer le codespace
gh codespace delete
# Afficher les journaux
gh codespace logs
--tail 100
# Afficher les ports
gh codespace ports
# Transférer le port
gh codespace cp 8080:8080
# Reconstruire le codespace
gh codespace rebuild
# Modifier le codespace
gh codespace edit --machine standardLinux
# Support Jupyter
gh codespace jupyter
# Copier des fichiers vers/depuis le codespace
gh codespace cp file.txt :/workspaces/file.txt
gh codespace cp :/workspaces/file.txt ./file.txt
Organisations (gh org)
# Lister les organisations
gh org list
# Lister pour un utilisateur
gh org list --user username
# Sortie JSON
gh org list --json login,name,description
# Afficher l'organisation
gh org view orgname
# Afficher les membres de l'organisation
gh org view orgname --json members --jq '.members[] | .login'
Recherche (gh search)
# Rechercher du code
gh search code "TODO"
# Rechercher dans un dépôt spécifique
gh search code "TODO" --repo owner/repo
# Rechercher des commits
gh search commits "fix bug"
# Rechercher des problèmes
gh search issues "label:bug state:open"
# Rechercher des PR
gh search prs "is:open is:pr review:required"
# Rechercher des dépôts
gh search repos "stars:>1000 language:python"
# Limiter les résultats
gh search repos "topic:api" --limit 50
# Sortie JSON
gh search repos "stars:>100" --json name,description,stargazers
# Trier les résultats
gh search repos "language:rust" --order desc --sort stars
# Rechercher avec des extensions
gh search code "import" --extension py
# Recherche web (ouvrir dans le navigateur)
gh search prs "is:open" --web
Étiquettes (gh label)
# Lister les étiquettes
gh label list
# Créer une étiquette
gh label create bug --color "d73a4a" --description "Quelque chose ne fonctionne pas"
# Créer avec une couleur hexadécimale
gh label create enhancement --color "#a2eeef"
# Modifier une étiquette
gh label edit bug --name "bug-report" --color "ff0000"
# Supprimer une étiquette
gh label delete bug
# Cloner les étiquettes à partir du dépôt
gh label clone owner/repo
# Cloner dans un dépôt spécifique
gh label clone owner/repo --repo target/repo
Clés SSH (gh ssh-key)
# Lister les clés SSH
gh ssh-key list
# Ajouter une clé SSH
gh ssh-key add ~/.ssh/id_rsa.pub --title "Mon ordinateur portable"
# Ajouter une clé avec un type
gh ssh-key add ~/.ssh/id_ed25519.pub --type "authentication"
# Supprimer une clé SSH
gh ssh-key delete 12345
# Supprimer par titre
gh ssh-key delete --title "Mon ordinateur portable"
Clés GPG (gh gpg-key)
# Lister les clés GPG
gh gpg-key list
# Ajouter une clé GPG
gh gpg-key add ~/.ssh/id_rsa.pub
# Supprimer une clé GPG
gh gpg-key delete 12345
# Supprimer par ID de clé
gh gpg-key delete ABCD1234
Statut (gh status)
# Afficher l'aperçu du statut
gh status
# Statut pour des dépôts spécifiques
gh status --repo owner/repo
# Sortie JSON
gh status --json
Configuration (gh config)
# Lister toute la configuration
gh config list
# Obtenir une valeur spécifique
gh config get editor
# Définir une valeur
gh config set editor vim
# Définir le protocole git
gh config set git_protocol ssh
# Effacer le cache
gh config clear-cache
# Définir le comportement des invites
gh config set prompt disabled
gh config set prompt enabled
Extensions (gh extension)
# Lister les extensions installées
gh extension list
# Rechercher des extensions
gh extension search github
# Installer une extension
gh extension install owner/extension-repo
# Installer depuis une branche
gh extension install owner/extension-repo --branch develop
# Mettre à jour une extension
gh extension upgrade extension-name
# Supprimer une extension
gh extension remove extension-name
# Créer une nouvelle extension
gh extension create my-extension
# Parcourir les extensions
gh extension browse
# Exécuter la commande d'une extension
gh extension exec my-extension --arg value
Alias (gh alias)
# Lister les alias
gh alias list
# Définir un alias
gh alias set prview 'pr view --web'
# Définir un alias shell
gh alias set co 'pr checkout' --shell
# Supprimer un alias
gh alias delete prview
# Importer des alias
gh alias import ./aliases.sh
Requêtes API (gh api)
# Effectuer une requête API
gh api /user
# Requête avec méthode
gh api --method POST /repos/owner/repo/issues \
--field title="Titre du problème" \
--field body="Corps du problème"
# Requête avec en-têtes
gh api /user \
--header "Accept: application/vnd.github.v3+json"
# Requête avec pagination
gh api /user/repos --paginate
# Sortie brute (pas de formatage)
gh api /user --raw
# Inclure les en-têtes en sortie
gh api /user --include
# Mode silencieux (pas de sortie de progrès)
gh api /user --silent
# Entrée depuis un fichier
gh api --input request.json
# Requête jq sur la réponse
gh api /user --jq '.login'
# Champ de la réponse
gh api /repos/owner/repo --jq '.stargazers_count'
# GitHub Enterprise
gh api /user --hostname enterprise.internal
# Requête GraphQL
gh api graphql \
-f query='
{
viewer {
login
repositories(first: 5) {
nodes {
name
}
}
}
}'
Ensembles de règles (gh ruleset)
# Lister les ensembles de règles
gh ruleset list
# Afficher un ensemble de règles
gh ruleset view 123
# Vérifier un ensemble de règles
gh ruleset check --branch feature
# Vérifier un dépôt spécifique
gh ruleset check --repo owner/repo --branch main
Attestations (gh attestation)
# Télécharger une attestation
gh attestation download owner/repo \
--artifact-id 123456
# Vérifier une attestation
gh attestation verify owner/repo
# Obtenir la racine de confiance
gh attestation trusted-root
Complément (gh completion)
# Générer le complément de shell
gh completion -s bash > ~/.gh-complete.bash
gh completion -s zsh > ~/.gh-complete.zsh
gh completion -s fish > ~/.gh-complete.fish
gh completion -s powershell > ~/.gh-complete.ps1
# Instructions spécifiques au shell
gh completion --shell=bash
gh completion --shell=zsh
Avant-première (gh preview)
# Lister les fonctionnalités en avant-première
gh preview
# Exécuter le script en avant-première
gh preview prompter
Tâches d'agent (gh agent-task)
# Lister les tâches d'agent
gh agent-task list
# Afficher une tâche d'agent
gh agent-task view 123
# Créer une tâche d'agent
gh agent-task create --description "Ma tâche"
Drapeaux globaux
| Drapeau | Description |
|---|---|
--help / -h |
Afficher l'aide pour la commande |
--version |
Afficher la version de gh |
--repo [HOST/]OWNER/REPO |
Sélectionner un autre dépôt |
--hostname HOST |
Nom d'hôte GitHub |
--jq EXPRESSION |
Filtrer la sortie JSON |
--json FIELDS |
Sortie JSON avec les champs spécifiés |
--template STRING |
Formater JSON en utilisant le template |
--web |
Ouvrir dans le navigateur |
--paginate |
Effectuer les appels API supplémentaires |
--verbose |
Afficher la sortie détaillée |
--debug |
Afficher la sortie de débogage |
--timeout SECONDS |
Durée maximale de la requête API |
--cache CACHE |
Contrôle du cache (default, force, bypass) |
Formatage de la sortie
Sortie JSON
# JSON basique
gh repo view --json name,description
# Champs imbriqués
gh repo view --json owner,name --jq '.owner.login + "/" + .name'
# Opérations sur les tableaux
gh pr list --json number,title --jq '.[] | select(.number > 100)'
# Requêtes complexes
gh issue list --json number,title,labels \
--jq '.[] | {number, title: .title, tags: [.labels[].name]}'
Sortie de template
# Template personnalisé
gh repo view \
--template '{{.name}}: {{.description}}'
# Template multi-lignes
gh pr view 123 \
--template 'Titre : {{.title}}
Auteur : {{.author.login}}
Statut : {{.state}}
'
Flux de travail courants
Créer une PR à partir d'un problème
# Créer une branche à partir d'un problème
gh issue develop 123 --branch feature/issue-123
# Effectuer des modifications, commiter, pousser
git add .
git commit -m "Corriger le problème #123"
git push
# Créer une PR liant au problème
gh pr create --title "Corriger #123" --body "Ferme #123"
Opérations en masse
# Fermer plusieurs problèmes
gh issue list --search "label:stale" \
--json number \
--jq '.[].number' | \
xargs -I {} gh issue close {} --comment "Fermeture en raison de l'obsolescence"
# Ajouter une étiquette à plusieurs PR
gh pr list --search "review:required" \
--json number \
--jq '.[].number' | \
xargs -I {} gh pr edit {} --add-label needs-review
Flux de configuration du dépôt
# Créer un dépôt avec la configuration initiale
gh repo create my-project --public \
--description "Mon super projet" \
--clone \
--gitignore python \
--license mit
cd my-project
# Configurer les branches
git checkout -b develop
git push -u origin develop
# Créer des étiquettes
gh label create bug --color "d73a4a" --description "Signalement de bug"
gh label create enhancement --color "a2eeef" --description "Demande de fonctionnalité"
gh label create documentation --color "0075ca" --description "Documentation"
Flux de travail CI/CD
# Exécuter le workflow et attendre
RUN_ID=$(gh workflow run ci.yml --ref main --jq '.databaseId')
# Surveiller l'exécution
gh run watch "$RUN_ID"
# Télécharger les artefacts après l'achèvement
gh run download "$RUN_ID" --dir ./artifacts
Flux de synchronisation du fork
# Fork le dépôt
gh repo fork original/repo --clone
cd repo
# Ajouter le remote upstream
git remote add upstream https://github.com/original/repo.git
# Synchroniser le fork
gh repo sync
# Ou synchronisation manuelle
git fetch upstream
git checkout main
git merge upstream/main
git push origin main
Configuration de l'environnement
Intégration du shell
# Ajouter à ~/.bashrc ou ~/.zshrc
eval "$(gh completion -s bash)" # ou zsh/fish
# Créer des alias utiles
alias gs='gh status'
alias gpr='gh pr view --web'
alias gir='gh issue view --web'
alias gco='gh pr checkout'
Configuration Git
# Utiliser gh comme gestionnaire d'authentifiants
gh auth setup-git
# Définir gh comme défaut pour les opérations de dépôt
git config --global credential.helper 'gh !gh auth setup-git'
# Ou manuellement
git config --global credential.helper github
Bonnes pratiques
-
Authentification : Utiliser les variables d'environnement pour l'automatisation
export GH_TOKEN=$(gh auth token) -
Dépôt par défaut : Définir un dépôt par défaut pour éviter les répétitions
gh repo set-default owner/repo -
Parsing JSON : Utiliser jq pour l'extraction de données complexes
gh pr list --json number,title --jq '.[] | select(.title | contains("fix"))' -
Pagination : Utiliser --paginate pour les grands ensembles de résultats
gh issue list --state all --paginate -
Mise en cache : Utiliser le contrôle du cache pour les données fréquemment accédées
gh api /user --cache force
Obtenir de l'aide
# Aide générale
gh --help
# Aide pour une commande
gh pr --help
gh issue create --help
# Rubriques d'aide
gh help formatting
gh help environment
gh help exit-codes
gh help accessibility
Références
- Manuel officiel : https://cli.github.com/manual/
- Documentation GitHub : https://docs.github.com/en/github-cli
- API REST : https://docs.github.com/en/rest
- API GraphQL : https://docs.github.com/en/graphql