Estou Registrando o meu estudo de git.
Para este segundo post, utilizei o seguinte vídeo:
Git #2 - Trabalhando com Branch's e diferenciando Merge, Squash e Rebase
Branch (Ramificação)
Nunca mais desenvolver na master. Sempre criar uma branch nova e depois fazer o merge.

A branch criada será uma cópia da master.
Para criar uma nova branch, por exemplo chamada dev, podemos usar o comando abaixo:
$ git branch dev
Podemos olhar as branchs existentes com o comando:
$ git branch
Para remover a branch dev, use o comando:
$ git branch -d dev
Navegando e criando branchs com o Checkout
O nosso projeto está assim. Estamos na master com um commit já efetuado.

Para navegar entre as branchs podemos usar o checkout. Mas neste caso não existe ainda uma branch chamada feature/client.
$ git checkout feature/client
error: pathspec 'feature/client' did not match any file(s) known to git
Então podemos usar o -b para criar a branch. Além de criar,  vai entrar na branch feature/client.
$ git checkout -b feature/client
Switched to a new branch 'feature/client'
Criando e fazendo o commit do arquivo client:

Ao trocar para a branch master, podemos ver que não existe mais o arquivo client, criado na branch feature/client. 

Se trocarmos para a branch feature/client, podemos ver que o arquivo client ainda existe.

Fazendo a junção das branchs com merge
Primeiro retornamos para a branch master, pois queremos mesclar a branch feature/client dentro da master.
Depois usamos o comando merge para juntar.
Vamos desfazer o que fizemos excluindo a pasta do git.
$ rm -rf .git
E, podemos apagar os arquivos criados.
Após, podemos iniciar o git novamente.
$ git init
E criar dois arquivos:
$ git log --oneline
4abee71 (HEAD -> master) m2
7710d41 m1
(END)
Criando a branch feature/x e depois criando o arquivo f1:
$ git checkout -b feature/x
$ git log --oneline
26bdac8 (HEAD -> feature/x) f1
4abee71 (master) m2
7710d41 m1
(END)
Conforme a linha do tempo, agora vamos criar o arquivo m3 na master:

Conforme a linha do tempo, agora vamos criar o arquivo f2 na feature/x:

Conforme a linha do tempo, agora vamos criar o arquivo m4 na master:

Conforme a linha do tempo, agora vamos criar o arquivo f3 na feature/x:

Como vamos mesclar agora????
Vamos mesclar a feature/x na master:
$ git checkout master  
$ git merge feature/x 
Após o comando acima, como as duas branchs possuem alterações, o merge gera um commit adicional, que vai marcar a mescla das duas branchs.

Podemos editar essa mensagem, ou apenas sair com o comando :wq! 
$ git log --oneline
Observe a ordem dos commits. Foi colocado exatamente na posição de acordo com o tempo que eles acontecerão.
Fazendo a junção das branchs com squash
Desfazendo o merge anterior:
$ git reset HEAD~1 --hard
O --hard é usado porque queremos descartar os arquivos (que foram adicionados no merge) da branch master.
Agora vamos fazer o merge com a opção --squash
$ git log --oneline
Fazendo a junção das branchs com rebase
Desfazendo novamente o merge anterior:
$ git reset HEAD~1 --hard
Agora voltamos para esse cenário:
Agora vamos usar o rebase:
$ git rebase feature/x
O rebase não gera um commit:
A feature/x foi introduzida entre os commits da master:

!!!!!!! CUIDADO ao usar o rebase dessa maneira !!!!!!!!
O rebase é indicado se eu fosse mesclar ao contrário, a master dentro da feature/x, pra não gerar vários commits de merge.
Recuperando versões dentro dos commits com checkout
Alterando o arquivo f1:
Alterando o arquivo f1 pela segunda vez:
Escolhendo a versão do f1 que queremos recuperar:
$ git log --oneline
Primeiro a hash e depois o nome do arquivo:
$ git checkout 39a89ef f1 
$ git log --oneline
Era isso!
Para mais detalhes ver o vídeo:
Git #2 - Trabalhando com Branch's e diferenciando Merge, Squash e Rebase
 




























 
    
Top comments (0)