Depois eu leio

Archive for the 'git' Category

Alias para rebase

Resolver conflitos durante um rebase é um processo que pode ser bastante repetitivo, por isso, normalmente utilizo estes dois alias no .gitconfig para ajudar:

[alias]
next = "!git add . && git rebase --continue"
conflict = "!f() { git ls-files --unmerged | cut -f2 | sort -u ; }; mate `f`"

O "mate" ali no final é para abrir os arquivos em conflito no TextMate, substitua pelo seu editor favorito. Então minha rotina de rebase fica assim:

1. Sincronizando o master
[rogerio] ~/projects/spikes/post_rebase (master)
$ git pull

2. Iniciando rebase
[rogerio] ~/projects/spikes/post_rebase (feature_xpto)
$ git rebase master

4. Conflitos: utilizar o alias para abrir simultaneamente todos os conflitos no seu editor favorito
[rogerio] ~/projects/spikes/post_rebase ((babd371...)|REBASE)
$ git conflict

4. Após resolver os conflitos, aplicar o patch e continuar
[rogerio] ~/projects/spikes/post_rebase ((babd371...)|REBASE)
$ git next

Também é possível configurar o Git para utilizar alguma ferramenta visual para resolução de conflitos, como o DiffMerge, Kdiff3 ou Meld, mas eu pessoalmente prefiro o jeito old school mesmo. Mais informações aqui.

No comments

Dica rápida: atualizando um arquivo a partir de outro branch ou revisão (GIT)

Para puxar um arquivo específico de algum outro branch ou versão, pode-se usar o seguinte comando:

git show [repositório]/[branch]:[path do arquivo] > [path para escrever no arquivo local]

Exemplos:

Puxando do branch onde o Zezinho já consertou o arquivo

Supondo que por algum motivo ele ainda não possa integrar ao master, você pode sincronizar apenas o arquivo que interessa direto do branch dele (lembre-se de fazer o git fetch antes):

git show origin/fix_js:public/javascripts/arquivo.js > public/javascripts/arquivo.js

Rollback para uma revisão específica

- git show HEAD~3:public/javascripts/arquivo.js > public/javascripts/arquivo.js

No comments