Executando verificação de segurança...
12

Como fazer commit apenas de parte de um arquivo no Git?

Resumidamente:

Use o comando:

git add -p

Explicando melhor

O comando git add -p (ou sua forma completa git add --patch) permite que você adicione ao stage apenas partes específicas de um arquivo, em vez de incluir tudo de uma vez.

Quando você executa:

git add -p

O Git percorre os arquivos modificados e, trecho a trecho (hunk), pergunta o que você deseja fazer com cada alteração:

❯ git add -p
diff --git a/ansible/file.yml b/ansible/file.yml
index 73f6b4d..899610f 100644
--- a/ansible/file.yml
+++ b/ansible/file.yml
@@ -52,7 +52,8 @@
 loop:
 -  "service"
+ - "node_modules"
+ - "systemd_templates"

(1/1) Stage this hunk [y,n,q,a,d,e,?]?

Aqui entra a parte interativa:

  • y → adiciona esse trecho ao stage
  • n → ignora o trecho e deixa-o fora do stage
  • q → sai do modo interativo
  • a → adiciona todos os trechos restantes do arquivo
  • d → ignora todos os trechos restantes
  • e → permite editar manualmente o hunk antes de adicioná-lo

Essas opções tornam o processo muito mais flexível, permitindo que você construa commits bem organizados e focados.

Imagine, por exemplo, que você esteja ajustando um bug em um arquivo, mas ao mesmo tempo aproveitou para melhorar a formatação e adicionar comentários. Se você rodar apenas git add <arquivo>, tudo será incluído no commit de uma vez, misturando o bugfix com mudanças cosméticas.
Com git add -p, você pode escolher adicionar apenas a correção do bug e deixar a parte de formatação para um commit separado.


Lembre-se do índice (stage)

O stage (ou índice) é a área intermediária onde ficam armazenadas as alterações que você deseja incluir no próximo commit.
Quando você usa git add -p, está apenas decidindo quais mudanças vão para esse índice.
Nada é gravado no histórico ainda. Para consolidar, você precisa executar:

git commit -m "mensagem do commit"

Esse fluxo dá muito mais controle e ajuda a evitar aqueles commits gigantes que misturam várias coisas diferentes.

Por que isso é útil?

A forma mais comum de adicionar mudanças é com:

git add .

ou

git add <arquivo>

O risco é que você pode acabar adicionando modificações que nem lembrava que tinha feito, levando a commits desorganizados e difíceis de entender.

Quando isso acontece, o histórico do repositório perde clareza: fica complicado revisar mudanças, encontrar a origem de bugs ou até mesmo explicar o que cada commit realmente representa.

O git add -p resolve esse problema porque força uma etapa de reflexão.
Antes de mandar tudo para o stage, você olha cada pedaço de código e decide se ele deve ou não ir para o próximo commit.
Esse cuidado resulta em um histórico muito mais limpo, com commits:

  • 📌 Pequenos e objetivos
  • 📌 Sem alterações desnecessárias misturadas
  • 📌 Que contam uma “história” clara do desenvolvimento

Exemplo prático

Imagine que você está desenvolvendo uma nova funcionalidade, mas no meio do caminho encontra um bug pequeno e o corrige rapidamente no mesmo arquivo.
Se você rodar apenas:

git add .
git commit -m "implementa feature X"

O bugfix vai acabar misturado com a feature.
Depois de semanas, quando alguém olhar esse commit, vai ser difícil entender que ali também havia uma correção.

Agora veja com git add -p:

  1. Você adiciona apenas o trecho do bugfix
git add -p
git commit -m "corrige bug Y em app.js"
  1. Depois adiciona a parte da nova funcionalidade
git add -p
git commit -m "implementa feature X"

Pronto, dois commits separados, cada um com um propósito bem definido.


Dica extra

Caso você tenha adicionado algo por engano ao stage, é fácil corrigir:

git reset <arquivo>

ou, se preferir a forma mais recente:

git restore --staged <arquivo>

Esses comandos removem o arquivo do índice, mas mantêm as alterações no diretório de trabalho. Assim você pode reorganizar seus commits sem perder nada.


Em resumo: usar git add -p pode parecer um passo a mais no início, mas traz vantagens a médio e longo prazo.
Seu histórico ficará mais organizado, os commits mais claros e a colaboração em equipe muito mais eficiente.

Carregando publicação patrocinada...
3

Legal! Eu também fiz um post sobre isso, fica como complemento.

É um recurso bastante útil, já utilizei algumas vezes e me ajudou a organizar melhor as alterações.

Quanto aos comandos restore e reset, nem sempre serão equivalentes (depende das opções utilizadas). E para complementar, também fiz posts mais detalhados sobre eles: aqui e aqui.

1

Ah bem legal! Vi aqui que você fez uma série do Git, está bem mais completo mesmo! Vou dar uma olhada nos seus posts para aprender mais, obrigado por compartilhar!

0
1

Interessante, nunca usei e acredito que nunca vou usar, mais por uma questão de que faço commit para cada um dos arquivos e sigo muito a sério o SRP (Single Responsibility Principle).

Foco no que estou fazendo por arquivo dentro de uma branch. Se a branch é voltada para corrigir um bug, faço um commit por cada arquivo, detalhando o que alterei em cada parte de cada um deles e então envio.

"Ah, mas você vai ter que alterar X e Y, coisas que não fazem parte do bug, mas sim de uma feature."
Então estou fazendo uma branch errada e executando uma task diferente. Foco em tasks: se a task é corrigir bug, corrijo o bug, se logo em seguida preciso subir uma modificação da UI, vou para uma branch específica para isso.

"Ah, mas e se você vai alterar algo na UI em relação ao bug?"
Então não é uma feature, é literalmente parte da correção do bug, então está tudo certo.

2

Muito o bom o fluxo que você segue.

Agora se alguém implementa tudo em uma branch git add -p pode ser um aliado justamente para reforçar essa prática: ele permite separar dentro do mesmo arquivo mudanças que pertencem a commits diferentes (bugfix vs. refactor, por exemplo)

1

Concordo! No início, quando eu implementava tudo em uma única branch, esse comando teria sido muito útil para evitar que eu ficasse perdido. Às vezes ficava até confuso sobre o que escrever no commit, então acabava colocando apenas um resumo genérico tipo "corrigi bug sobre X e adicionei Y". Quando precisava reverter alguma coisa, tinha que implementar a outra parte novamente 😑.

1
1

Vou complementar com uma dica de programa que eu uso diariamente o GitHub Desktop, ele faz exatamente isso, eu uso ele pra commitar a linha.
Eu acabo fazendo varios commits no mesmo arquivo.
e consequentimente acabo fazendo um code review antes de commitar.

Fork Github Desktop para linux
Github Desktop Flatpack
Github Desktop Arch
GitHub Desktop Windows
Eu uso a versão do flatpack, que funciona e nunca tive problema pra instalar

Recomendo configurar as chaves ssh antes de instalar(na minha opiciao é mais facil).

0
1