DEV Community

Poveda
Poveda

Posted on

4 2

Git apply: colocando os patch files em stage

No último post mostrei como podemos utilizar arquivos patch para compartilhar mudanças e commits quando não temos acesso ao remote. A abordagem utilizada coloca as alterações diretamente na árvore de commits e possui mecanismos para evitar duplicidades no momento da aplicação.

Mas se eu quiser revisar as alterações antes de aplicar o commit na árvore?

É justamente para esse cenário que existe o git apply

Git apply

O comando git apply aplica as mudanças que estão dentro dos arquivos .patch aos arquivos correspondentes dentro da pasta de trabalho.

Para adicionar as mudanças basta executar o comando abaixo

git apply patch-commits/0001-Adiconadas-mais-motoriza-es-a-base.patch
Enter fullscreen mode Exit fullscreen mode

Após a execução do comando temos a área de staging com os arquivos alterados

~/mongoblogposts$ git status
On branch main
Your branch is up to date with 'origin/main'.

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        modified:   db_data/carro_dump.json

no changes added to commit (use "git add" and/or "git commit -a")
Enter fullscreen mode Exit fullscreen mode

E analisando os logs dos commits, nota-se que nenhum novo commit foi adicionado à árvore

~/mongoblogposts$ git log -1 --oneline
65182aa (HEAD -> main, origin/main) Material post git patch
Enter fullscreen mode Exit fullscreen mode

Verificando quais arquivos foram alterados no último commit:

~/mongoblogposts$ git show -1 --compact-summary
commit 65182aa52f918b567e33545bd15f3bea93d67c58 (HEAD -> main, origin/main)
Author: Juliano Poveda <julianopoveda@github.com>
Date:   Mon Sep 13 09:41:58 2021 -0300

    Material post git patch

 patch-commits/0001-Adiconadas-mais-motoriza-es-a-base.patch (new)     | 386 ++++++++++++++++++++++++++++++++++++++++++
 patch-commits/0002-Reformata-o-readme-criacao-do-ambiente.patch (new) |  45 +++++
 patch-commits/readme.md (new)                                         |  83 +++++++++
Enter fullscreen mode Exit fullscreen mode

Viram! As alterações estão na área de staging e não há nenhum novo commit na árvore.

O parâmetro --check

O apply por padrão já verifica se é possível adicionar as alterações, no entanto, em determinadas ocasiões é bom fazer uam verificação do arquivo .patch antes de adicionar suas alterações. O parâmetro --check faz justamente esta validação. Caso os arquivos estejam aptos a serem adicionados à área de staging, nenhuma mensagem é retornada

~/mongoblogposts$ git apply patch-commits/0001-Adiconadas-mais-motoriza-es-a-base.patch
Enter fullscreen mode Exit fullscreen mode

Já se o arquivo não estiver apto, o comando emite a mensagem

error: patch failed: db_data/carro_dump.json:2
error: db_data/carro_dump.json: patch does not apply

Note que quando é passado --check no comando, as alterações constantes nos arquivos de patch não são aplicadas à área staging. Para que as alterações sejam aplicadas é necessário adicionar o parâmetro --apply ou rodar o comando sem o --check

Impressões e Conclusão

Este comando ao contrário do git am, nos permite fazer um "PR local" antes de adicionar as alterações à árvore.
Então, na próxima vez que ficares sem acesso ao repositório remoto e precisares entregar aquela tarefa super importante, acessa essa mini série e relembra como fazer a passagem das alterações por patch files :).

Os arquivos para teste, são os mesmos do post anterior(pasta patch-commits) e estão disponíveis no github.

Referências

https://git-scm.com/docs/git-apply

Postmark Image

Speedy emails, satisfied customers

Are delayed transactional emails costing you user satisfaction? Postmark delivers your emails almost instantly, keeping your customers happy and connected.

Sign up

Top comments (0)

A Workflow Copilot. Tailored to You.

Pieces.app image

Our desktop app, with its intelligent copilot, streamlines coding by generating snippets, extracting code from screenshots, and accelerating problem-solving.

Read the docs

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay