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
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")
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
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 +++++++++
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
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.
Top comments (0)