Usando git-patch para diversão e lucro

Eu odeio usar git stash. Ele deveria me deixar colocar o que estou trabalhando de lado e voltar a ele mais tarde, mas existem problemas claros que eu encontrei.

  • Escondendo algo e esquecendo-se disso
  • Fazer git stash pope obter conflitos de mesclagem + perder a capacidade de tentar novamente

Como resultado, muitas vezes eu simplesmente faço git add .; git commit -am "WIP"e depois faço git reset HEAD^quando volto.

Há momentos, porém, em que quero armazenar “ideias de código”. Não os quero no repositório, mas gostaria de poder consultá-los se quiser procurá-los.

A maioria dos comandos em git aceita um argumento -p: Este argumento mostra as mudanças relacionadas ao comando atual na “forma de patch”.

  • git show -po padrão é HEADe, nesse caso, é equivalente a git diff. Pode ser usado para mostrar qualquer referência válida.

  • git log -p mostra a história em formato de patch

  • git diff -p mostra diferenças entre dois árbitros em formato de patch

Portanto, eles são particularmente úteis quando combinados com git apply. Este comando pegará um arquivo ou STDINe aplicará as mudanças na árvore de trabalho.

Exemplo: imaginei que um bug estava relacionado ao modo como truncamos tabelas com acessórios transacionais. Ele falhou no CI e eu quero voltar e “divergir” disso e tentar bagunçar nossa serialização JSON, mas não quero perder o trabalho caso tenha sido uma boa direção.

git log -1 -p > ~/tmp/project/transactional_fixtures.patch

git reset HEAD
^ --hard

# do the work!

Digamos que eu descubra depois de mexer no branch e IC atuais e descubra que realmente queria ir com a direção transactional_fixtures.

git reset REF^ --hard #REF is the common parent of the divergence
cat
~/tmp/project/transactional_fixtures.patch | git apply

Voila! Eu tenho meu (s) commit (s) original (is) de volta para a direção original.

Você pode imaginar que isso seja útil quando estiver preocupado com git stash. git cmd -pe git applysão muito úteis para manter stashes offline fora do repo e poder usá-los mais tarde.