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)