DEV Community

Poveda
Poveda

Posted on

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

Top comments (0)