12 pontos por GN⁺ 2025-11-11 | 1 comentários | Compartilhar no WhatsApp
  • A ferramenta de UI de Git baseada em terminal lazygit combina a simplicidade da linha de comando com a intuitividade de uma interface gráfica para oferecer um ambiente de trabalho rápido e consistente
  • Projetada com foco em consistência, descobribilidade e interatividade, permite que até iniciantes a utilizem imediatamente, desde que conheçam os conceitos básicos de Git
  • Keybindings no estilo vim e uma estrutura visual clara possibilitam navegação rápida e reduzem o tempo gasto em tarefas repetitivas
  • Patch por linha, rebase interativo, cherry-pick e mais simplificam operações complexas do Git e aumentam a produtividade
  • Baseada em um framework TUI open source escrito em Go, também serve como uma referência valiosa para o design de UX de outras ferramentas de desenvolvimento

Contexto do surgimento do LazyGit

  • O autor descobriu a eficiência da ferramenta ao executar o lazygit por acaso durante experimentos com Neovim
    • Depois disso, migrou todo o seu workflow de Git para o lazygit
  • Antes, usava uma combinação de git gui, gitk e CLI, mas passou a buscar alternativas por causa de interfaces antiquadas e instabilidade
  • O lazygit é simples, rápido e estruturado de forma compatível com a CLI, o que garante confiabilidade

Principais características do LazyGit

Consistência

  • A interface é composta por vários “view boxes”, mantendo sempre a mesma estrutura visual
    • Ao selecionar uma caixa à esquerda, o conteúdo à direita muda de forma vinculada
  • Usa terminologia e abstrações do Git tal como são, reduzindo a curva de aprendizado
    • Ex.: conceitos padrão do Git como bisect e hunk podem ser assimilados naturalmente
  • Adota keybindings do vim (h/j/k/l, q, /, y, c, a, f, p, r etc.), permitindo operações rápidas
  • Limita o número de comandos e segue a filosofia Unix de “fazer uma coisa bem feita”

Descobribilidade

  • Ao iniciar, exibe imediatamente as informações necessárias
    • Repositório atual, branch, estado do staging, commits recentes, stash, último comando, atalhos etc.
  • Apresenta informações sem sobrecarga visual, minimizando a troca de contexto
  • É possível verificar os atalhos imediatamente pelo rodapé ou pela tecla ?
  • O usuário pode entender intuitivamente sua posição e estado atuais a qualquer momento

Interatividade

  • Guia operações complexas do Git por meio de uma interface interativa
    • Ex.: ao fazer push, alerta sobre diferenças com o upstream; ao fazer rebase, pergunta se deve ser interativo
  • Durante processos como rebase, resolução de conflitos e troca de branch, faz confirmações automáticas e sugere ações seguintes
  • Permite operar por combinações de teclas sem precisar digitar diretamente comandos como pick/drop/squash
  • Com o mínimo de interrupção, aumenta a confiança do usuário e a velocidade de trabalho

Workflow de Git aprimorado

  • O lazygit não adiciona um novo workflow, mas melhora o uso dos recursos existentes do Git de forma mais segura e rápida
  • O recurso de seleção de patch por linha e por hunk permite restaurar código com granularidade fina
    • É possível reverter ou separar apenas parte de um commit
  • Exemplos de workflows principais com atalhos
    • Editar e fazer push de um commit existente: 2 space A P enter
    • Criar e fazer push de um novo commit: 2 space c <título> P
    • Fazer rebase de branch: 3 r i ... m c
    • Excluir commit: 4 d
    • Dividir commit: 4 enter enter <c-p> n <título> enter
    • Cherry-pick: 3 4 C 3 4 V
  • Com o uso repetido, os atalhos se tornam um hábito natural e a velocidade de trabalho aumenta drasticamente

Lições para UX em ferramentas de desenvolvimento

  • A simplicidade, consistência, descobribilidade, padrões sensatos e interatividade do lazygit são ótimos princípios de design para ferramentas de desenvolvimento
  • Capacidade profunda de configuração, extensibilidade e um ecossistema saudável de contribuições open source são mantidos de forma equilibrada
  • Baseado em um framework TUI (gocui) escrito 100% em Go, podendo ser aproveitado no desenvolvimento de outras ferramentas
  • Mostra a possibilidade de criar novas ferramentas CLI/TUI aplicando padrões de UX semelhantes

Conclusão

  • O lazygit é visto não apenas como uma simples UI de Git, mas como um caso exemplar de produtividade para desenvolvedores e design de UX
  • Mesmo com o avanço de recursos assistidos por IA, continua tendo um papel central em áreas de controle de versão que exigem precisão e confiabilidade
  • Segue evoluindo continuamente por meio das contribuições e da colaboração da comunidade open source
  • Qualquer pessoa pode usar e contribuir, com uma experiência de Git rápida e intuitiva

1 comentários

 
GN⁺ 2025-11-11
Comentários no Hacker News
  • Antes eu gostava de TUIs de git focadas em teclado como magit, neogit e lazygit
    mas agora uso jujutsu(jj) no lugar do git
    Depois que me acostumei com a CLI do jj, comecei a usar o jjui
    Preciso dividir commits com frequência, e o plugin hunk.nvim é muito útil
    E para resolver conflitos com jj conflict, o jj-diffconflicts é o melhor
    Agora, com o jj, dá para editar o gráfico de commits com a mesma naturalidade de mover linhas de código

    • Valeu pelos links das ferramentas. Você conhece alguma outra ferramenta que consiga separar ou recombinar diffs em uma série de patches?
      Quando removo hunks desnecessários de um commit antigo, isso acaba gerando conflitos em cascata nos commits seguintes; queria saber se existe alguma ferramenta que lide com isso automaticamente
    • Eu também migrei totalmente do git para o jj. Ainda assim, a visualização de diff do lazygit é mais limpa, então ainda uso o lazygit só para isso
      Gosto de como o diff fica separado por arquivo, e esse é o único motivo
    • Eu também estou migrando para o jj. Ainda não apliquei em todos os projetos, mas é só questão de tempo
      Ainda assim, queria que existissem mais GUIs dedicadas ao jj. Uso o gg quando quero ver várias mudanças de uma vez, mas ele não tem side-by-side diff
      Depois de ver vídeos do git butler, fiquei pensando que seria ótimo se a UI do jj evoluísse nessa direção
      Seria muito bom ter uma GUI onde desse para arrastar mudanças ou fazer split/rebase de forma interativa
    • O problema do git é ser opinionless demais (unopinionated)
      Cada equipe tem um fluxo de git diferente, e os desenvolvedores acabam se prendendo a micro-otimizações inúteis ou relutam em aprender
      No fim, isso cria uma situação em que cada time precisa de um especialista em git
      Eu preferiria uma ferramenta que simplesmente impusesse um único jeito de trabalhar
  • Pode parecer engraçado, mas entre todas as UIs de git que já usei, nenhuma foi tão boa quanto o SourceTree
    Para tarefas simples, ele é muito mais agradável que a CLI, e a visualização de estado dos arquivos e do histórico é excelente
    Também é fácil fazer stage/unstage por hunk ou por linha
    Só é uma pena não existir versão para Linux. Já testei outras ferramentas, mas sempre acabo voltando
    Recentemente também usei o lazygit, e entre as TUIs ele é bem competente

    • Já experimentou o magit? Como é baseado em Emacs, tem uma curva de aprendizado, mas é totalmente centrado no teclado e é difícil achar um fluxo de trabalho que ele não suporte
    • Na hora de commitar, a visualização de Commit do Git Extensions era a melhor
      Ela não tem atualização automática, então não entra em conflito com a CLI
      Documentação de Commit do Git Extensions
    • O meu favorito é o Sublime Merge. É rápido, tem uma UI limpa, funciona bem em todas as plataformas e se resolve com uma licença única
    • Acho Fork e Tower muito melhores que o SourceTree. Será que você só usou ferramentas gratuitas?
    • Quase não existe UI no mundo que eu odeie mais do que o SourceTree
      Já perdi muito tempo com inúmeros bugs e problemas estranhos. Por favor, abandonem o SourceTree
  • Quanto mais eu uso git diretamente, mais sinto o quão irracional é a interface da CLI do git
    Estou usando jj há dois anos e acho que não consigo mais voltar para a CLI do git
    Vejo gente se confundindo com git e criando problemas com tanta frequência que acabo recomendando simplesmente usar outra coisa

    • Também tentei usar jj várias vezes, mas o fluxo de trabalho nunca encaixou de verdade e isso me deixa mais lento
      Gosto de dividir mudanças e commitar a partir do editor, mas o jj ainda tem integração fraca com editores, então meus commits acabam ficando bagunçados
  • Muita gente evita pelo nome, mas o GitHub Desktop é muito bom
    Funciona bem até com repositórios fora do GitHub, e é fácil editar commits e fazer cherry-pick por arquivo ou por linha
    Como ele explica cada operação mais complexa, é especialmente bom para iniciantes
    Faltam recursos de merge e de gráfico, mas mesmo assim acho muito melhor do que a CLI do git
    Quando entra alguém novo no time, eu sempre faço a pessoa usar o GH Desktop. Tem menos erros e o entendimento vem mais rápido

    • Também concordo com o GH Desktop. Ele adiciona recursos devagar, mas com cuidado
      Para quem não tem confiança com git, é a melhor escolha
      Por outro lado, já vi muitos desenvolvedores juniores confiantes demais no git destruírem repositórios
      Por isso recomendo fortemente o GH Desktop para o time
    • Acho que a ausência de merge/resolução de conflitos e de gráfico no GH Desktop é justamente o que faz muita gente evitá-lo
  • Muita gente que usa git não conhece o git-absorb
    Ele se encaixa bem em qualquer fluxo de git e reduz bastante a dor de ajustar mudanças staged distribuindo-as entre vários commits
    A maioria das TUIs não tem esse tipo de recurso

    • Parece útil, mas eu uso magit, então commits e rebase já são rápidos para mim
      Não gosto muito de ferramentas baseadas em Rust porque trazem dependências demais
    • Isso também está incluído nos repositórios GNU/Debian
    • Usei por alguns meses, mas houve casos em que ele fez squash errado e o repositório ficou meio quebrado
      Perdi a confiança e acabei parando de usar. O fato de agir de forma mágica demais acaba sendo desconfortável
    • Para mim, a clareza do histórico é mais importante. Reescrever o histórico só para deixar nomes bonitos não parece uma boa ideia
  • Eu ainda prefiro o tig
    Tem menos recursos, mas a UI é simples e rápida
    Uso principalmente para adicionar coisas ao índice de forma incremental

    • Eu também uso o tig para stage por hunk há mais de 15 anos
  • O VS Code é gratuito, multiplataforma e muita gente já usa
    A GUI de git dele também é muito boa e dá conta de todos os fluxos mais comuns
    No dia a dia eu uso a CLI, mas quando o projeto já está aberto no VS Code, muitas vezes a GUI acaba sendo mais rápida e intuitiva

    • Mas acho que o problema é justamente ter que usar o próprio VS Code
  • A combinação LazyVim + tmux mudou completamente a forma como eu uso git
    Configurei para que, ao apertar ctrl-g, o lazygit abra como um tmux floating pane no diretório atual
    Assim consigo fazer operações de git na hora, sem entrar no neovim nem trocar de UI
    Em um fluxo de trabalho centrado no terminal, essa é a experiência mais flexível e fluida

    • Eu também descobri recentemente o tmux display-popup
      No ~/.tmux.conf,
      bind-key C-g display-popup -E -d "#{pane_current_path}" -xC -yC -w 80% -h 75% "lazygit"
      
      se você adicionar isso, pode abrir o popup do lazygit com ctrl-b ctrl-g e fechá-lo com q
  • Eu faço operações de git com comandos de voz + IA. Fora isso, acho que ctrl-r já é UI suficiente

  • Ninguém comentou ainda, mas o Gitu também é um cliente bem decente