12 points par GN⁺ 2025-11-11 | 1 commentaires | Partager sur WhatsApp
  • lazygit, un outil Git UI basé sur le terminal combine la simplicité de la ligne de commande et l’intuitivité d’une interface graphique pour offrir un environnement de travail rapide et cohérent
  • Conçu autour de la cohérence, la découvrabilité et l’interactivité, il peut être utilisé immédiatement par les débutants qui connaissent les concepts de base de Git
  • Les raccourcis clavier de style vim et une structure visuelle claire permettent une navigation rapide et réduisent les tâches répétitives
  • Des opérations Git complexes comme les patchs ligne par ligne, le rebase interactif ou le cherry-pick sont simplifiées, ce qui améliore la productivité
  • Basé sur un framework TUI open source écrit en Go, c’est aussi un exemple intéressant pour concevoir l’UX d’autres outils de développement

Pourquoi LazyGit est apparu

  • L’auteur a découvert l’efficacité de l’outil en lançant lazygit par hasard pendant une expérimentation avec Neovim
    • Il a ensuite basculé tout son workflow Git sur lazygit
  • Auparavant, il utilisait un mélange de git gui, gitk et de CLI, mais il a cherché une alternative à cause d’interfaces vieillissantes et d’une stabilité insuffisante
  • lazygit est simple, rapide et structuré de manière compatible avec la CLI, ce qui renforce sa fiabilité

Principales caractéristiques de LazyGit

Cohérence (Consistency)

  • L’interface est composée de plusieurs « boîtes de vue », ce qui conserve toujours la même structure visuelle
    • Lorsque l’on sélectionne une boîte à gauche, le contenu à droite change en conséquence
  • Il réutilise directement la terminologie et les abstractions de Git, ce qui réduit la courbe d’apprentissage
    • Par exemple, des concepts Git standard comme bisect ou hunk peuvent être assimilés naturellement
  • Il adopte des raccourcis clavier vim (h/j/k/l, q, /, y, c, a, f, p, r, etc.), ce qui permet une manipulation rapide
  • Il limite le nombre de commandes et suit la philosophie Unix du « faire une seule chose, mais bien »

Découvrabilité (Discoverability)

  • Il affiche immédiatement les informations nécessaires au lancement
    • dépôt actuel, branche, état du staging, commits récents, stash, dernière commande, raccourcis, etc.
  • Les informations sont présentées sans surcharge visuelle afin de minimiser les changements de contexte
  • Les raccourcis peuvent être consultés instantanément via le pied de page inférieur ou la touche ?
  • L’utilisateur peut à tout moment comprendre intuitivement sa position et l’état actuel

Interactivité (Interactivity)

  • Les opérations Git complexes sont guidées via une interface interactive
    • Par exemple, lors d’un push, l’outil avertit des différences avec l’upstream, et lors d’un rebase il demande s’il doit être interactif
  • Pendant les processus de rebase, résolution de conflits ou changement de branche, il effectue automatiquement des vérifications et propose les actions suivantes
  • Il permet d’agir avec des combinaisons de touches sans avoir à saisir directement les commandes pick/drop/squash
  • Cela améliore la confiance de l’utilisateur et sa vitesse avec un minimum d’interruptions

Un workflow Git amélioré

  • lazygit n’ajoute pas un nouveau workflow : il améliore simplement l’usage des fonctions Git existantes de façon plus sûre et plus rapide
  • La sélection de patchs ligne par ligne ou par hunk permet une restauration très fine du code
    • Il devient possible d’annuler ou de séparer seulement une partie d’un commit
  • Exemples de workflows raccourcis importants
    • Modifier un commit existant puis le pousser : 2 space A P enter
    • Créer un nouveau commit puis le pousser : 2 space c <titre> P
    • Rebaser une branche : 3 r i ... m c
    • Supprimer un commit : 4 d
    • Fractionner un commit : 4 enter enter <c-p> n <titre> enter
    • Cherry-pick : 3 4 C 3 4 V
  • À force de répétition, les raccourcis deviennent des réflexes naturels, ce qui augmente fortement la vitesse de travail

Leçons pour l’UX des outils de développement

  • La simplicité, la cohérence, la découvrabilité, les valeurs par défaut judicieuses et l’interactivité de lazygit constituent d’excellents principes de conception pour les outils de développement
  • Une forte capacité de configuration, une extensibilité et un écosystème de contributions open source y sont sainement maintenus
  • Il repose sur un framework TUI écrit à 100 % en Go (gocui), qui peut aussi servir au développement d’autres outils
  • Il montre la possibilité de créer de nouveaux outils CLI/TUI appliquant des modèles UX similaires

Conclusion

  • lazygit est considéré non seulement comme une simple interface Git, mais aussi comme un modèle en matière de productivité des développeurs et de conception UX
  • Même si les fonctions d’assistance par IA progressent, il conserve un rôle central dans le versioning, où précision et fiabilité restent essentielles
  • Il continue d’évoluer grâce aux contributions et à la collaboration de la communauté open source
  • Tout le monde peut l’utiliser et y contribuer, avec à la clé une expérience Git rapide et intuitive

1 commentaires

 
GN⁺ 2025-11-11
Avis Hacker News
  • Avant, j’aimais les TUI Git orientées clavier comme magit, neogit et lazygit
    mais maintenant j’utilise jujutsu (jj) à la place de git
    Après m’être habitué à la CLI de jj, j’ai commencé à utiliser jjui
    J’ai souvent besoin de scinder des commits, et le plugin hunk.nvim est très utile
    Pour résoudre les conflits avec jj conflict, jj-diffconflicts est ce qu’il y a de mieux
    Avec jj, on peut désormais éditer le graphe des commits aussi naturellement que si on déplaçait des lignes de code

    • Merci pour les liens vers ces outils. Je me demande si tu connais aussi d’autres outils capables de séparer ou recomposer des diff dans une série de patchs
      Quand on retire des hunk inutiles d’un ancien commit, cela provoque des conflits en cascade dans les commits suivants ; je me demande s’il existe un outil capable de gérer ça automatiquement
    • Moi aussi, je suis passé entièrement de git à jj. En revanche, j’utilise encore l’affichage des diff de lazygit, car je le trouve plus propre
      Le diff séparé par fichier est plus agréable à lire, c’est la seule raison
    • Moi aussi, je suis en train de passer à jj. Je ne l’ai pas encore adopté sur tous mes projets, mais ce n’est qu’une question de temps
      J’aimerais toutefois qu’il y ait davantage de GUI dédiées à jj. J’utilise gg quand je veux voir plusieurs changements d’un coup d’œil, mais il n’y a pas de diff côte à côte
      En voyant des vidéos de GitButler, je me suis dit qu’une UI pour jj gagnerait à évoluer dans cette direction
      Ce serait bien d’avoir une GUI permettant de déplacer des changements par glisser-déposer, ou de faire des split/rebase de façon interactive
    • Le problème de git, c’est qu’il est trop peu prescriptif (unopinionated)
      Chaque équipe a son propre git flow, et les développeurs ont tendance à se perdre dans des micro-optimisations inutiles ou à rechigner à apprendre
      Au final, on se retrouve avec une organisation où chaque équipe a besoin d’un expert git
      Je préférerais un outil qui impose clairement une seule manière de faire
  • Ça peut faire sourire, mais parmi toutes les UI Git que j’ai utilisées, aucune n’a jamais été meilleure que SourceTree
    Pour les tâches simples, c’est bien plus confortable que la CLI, et la vue d’état des fichiers et l’historique sont excellents
    Il est aussi très facile d’y faire du stage/unstage au niveau des hunk ou des lignes
    Dommage qu’il n’existe pas de version Linux. J’ai essayé tous les autres outils, mais je finis toujours par y revenir
    Récemment, j’ai aussi testé lazygit, et parmi les TUI, c’était plutôt pas mal

    • Tu as essayé magit ? C’est basé sur Emacs, donc il y a une courbe d’apprentissage, mais c’est entièrement centré sur le clavier et il est difficile de trouver un workflow qu’il ne prend pas en charge
    • Pour faire des commits, la vue Commit de Git Extensions était la meilleure
      Il n’y a pas de rafraîchissement automatique, donc pas de conflit avec la CLI
      Documentation Git Extensions Commit
    • Moi, c’est Sublime Merge que je préfère. C’est rapide, l’interface est propre, ça fonctionne bien sur toutes les plateformes, et un seul achat de licence suffit
    • Je pense que Fork ou Tower sont largement meilleurs que SourceTree. Peut-être que tu n’as essayé que des outils gratuits ?
    • Il n’existe presque pas d’UI que je déteste plus que SourceTree
      J’ai perdu un temps fou à cause de bugs innombrables et de problèmes absurdes. Franchement, il faut abandonner SourceTree
  • Plus j’utilise git directement, plus je ressens l’absurdité de l’interface CLI de git
    Ça fait deux ans que j’utilise jj, et je ne pense plus pouvoir revenir à la CLI git
    Je vois trop souvent des gens créer des problèmes parce qu’ils se perdent avec git, donc je leur conseille simplement d’utiliser autre chose

    • J’ai moi aussi essayé jj plusieurs fois, mais le workflow ne m’entre pas dans les doigts, donc je perds en vitesse
      J’aime découper et commit mes changements depuis l’éditeur, mais jj manque d’intégration avec les éditeurs, donc mes commits finissent par devenir désordonnés
  • À cause de son nom, beaucoup l’évitent, mais GitHub Desktop est vraiment bon
    Il fonctionne très bien aussi sur des dépôts autres que GitHub, et il permet facilement de modifier des commits et de faire du cherry-pick au niveau fichier ou ligne
    Chaque opération complexe est accompagnée d’explications, ce qui en fait un très bon choix pour les débutants
    Il manque des fonctions de merge et de graphe, mais malgré cela, je le trouve bien meilleur que la CLI git
    Quand un nouveau membre arrive dans l’équipe, je lui fais toujours utiliser GH Desktop. Il fait moins d’erreurs et comprend plus vite

    • Je suis d’accord pour GH Desktop. L’ajout de fonctionnalités est lent, mais réfléchi
      Pour quelqu’un qui ne maîtrise pas git, c’est le meilleur choix
      En revanche, j’ai vu trop de développeurs juniors trop sûrs d’eux avec git casser des dépôts
      C’est pourquoi je recommande fortement GH Desktop à mon équipe
    • L’absence de gestion des merges/conflits et de graphe dans GH Desktop est justement, à mon avis, la raison pour laquelle beaucoup l’évitent
  • Beaucoup d’utilisateurs de git ne connaissent pas git-absorb
    Ça s’intègre bien à n’importe quel git flow et cela réduit la douleur lorsqu’il faut répartir des changements staged en correctifs sur plusieurs commits
    La plupart des TUI n’ont pas ce genre de fonctionnalité

    • Ça a l’air utile, mais j’utilise magit, donc commits et rebases sont déjà rapides
      Je n’aime pas trop les outils basés sur Rust, car ils traînent trop de dépendances
    • C’est aussi inclus dans les dépôts GNU/Debian
    • Je l’ai utilisé pendant quelques mois, mais il m’est arrivé de mal faire un squash de commits, ce qui a laissé le dépôt à moitié cassé
      J’ai perdu confiance, donc j’ai fini par arrêter de l’utiliser. Le fait que ça fonctionne de manière trop magique me gêne plutôt
    • Pour moi, la clarté de l’historique est plus importante. Réécrire l’historique juste pour obtenir de jolis noms n’est pas une bonne idée
  • Je continue à préférer tig
    Il a moins de fonctionnalités, mais l’UI est simple et rapide
    Je l’utilise surtout pour l’ajout incrémental à l’index

    • Moi aussi, cela fait plus de 15 ans que j’utilise tig pour stage des hunk
  • VS Code est gratuit, multiplateforme, et beaucoup de gens l’utilisent déjà
    Son interface graphique Git est bien faite, et elle couvre tous les workflows classiques
    En général j’utilise la CLI, mais quand le projet est déjà ouvert dans VS Code, il est souvent plus rapide et plus intuitif de passer par la GUI

    • Mais le problème, selon moi, c’est justement qu’il faut utiliser VS Code lui-même
  • La combinaison LazyVim + tmux a complètement changé ma façon d’utiliser git
    J’ai configuré ctrl-g pour ouvrir lazygit dans un volet flottant tmux depuis le répertoire courant
    Je peux ainsi faire mes opérations git immédiatement, sans entrer dans neovim ni changer d’interface
    Dans un workflow centré sur le terminal, c’est l’expérience la plus souple et fluide

    • J’ai moi aussi découvert récemment tmux display-popup
      Dans ~/.tmux.conf,
      bind-key C-g display-popup -E -d "#{pane_current_path}" -xC -yC -w 80% -h 75% "lazygit"
      
      si on ajoute cela, on peut ouvrir la popup lazygit avec ctrl-b ctrl-g et la fermer avec q
  • Moi, je fais mes opérations git avec des commandes vocales + de l’IA. Sinon, je trouve que ctrl-r est une interface suffisante

  • Personne ne l’a encore mentionné, mais Gitu est aussi un client plutôt sympa