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)