Tutorial Git Avançado

A implantação de seu projeto por meio de um repositório remoto permite que você gerencie cada parte dele de maneira flexível. Correções de bugs, atualizações de recursos, exclusão de arquivos, trabalho em equipe, contribuições de código aberto, implantação de código e muito mais estão agora ao seu alcance com um forte conhecimento de Git.

Então, você está usando o Git, mas quer saber mais? Aqui estão algumas dicas mais avançadas do Git que tornarão o controle de versão do seu projeto uma brisa.

Git Branch

Um branch Git impede que você envie diretamente para o branch master. É útil se você gerencia um projeto com uma equipe de desenvolvedores. Você pode criar quantos branches Git quiser e depois mesclá-los com o branch master.

Criar um Branch Git

Para criar um branch Git, use:

 git branch branch_name

Mudar para um Git Branch

Use checkout para mudar para um branch Git:

 git checkout branch_name

Depois de mudar para um branch, você pode preparar suas mudanças usando git add –all . Em seguida, comprometa-os usando o comando git commit -m "commit name" .

Compare uma filial com o mestre

Use o comando git diff :

 git diff master..branch_name

Para comparar arquivos específicos:

 git diff master..testb -- main.html

Comparar dois branches é semelhante a como você compara um branch com o master:

 git diff branch1..branch2

Para ver as diferenças em um arquivo específico entre dois ramos:

 git diff branch1..branch2 -- main.html

Enviar alterações para uma filial remota

Você pode querer que outro desenvolvedor analise as mudanças que você fez em um arquivo em seu branch local antes de colocá-las ao vivo. Uma boa prática é empurrar seu branch local do Git para uma réplica remota para que eles possam dar uma olhada.

Vamos supor que você tenha criado anteriormente um branch local denominado changes . Você pode mudar para aquele branch local, ajustar todos os arquivos que você deseja, então preparar e enviá-los para aquele branch.

Você pode então enviar essas alterações para a versão remota do branch:

 git push origin changes

Mesclar filial remota com mestre usando solicitação pull

Portanto, outro programador auditou as mudanças no branch remoto ( mudanças ). Mas você deseja mesclá-lo com o branch master e colocá-lo ao vivo.

Lembre-se de que seu branch remoto herda o nome de seu branch local do Git ( mudanças ). Veja como mesclar as alterações:

Mude para o branch master:

 git checkout master

Puxe a origem ou HEAD do branch ( alterações ) para mesclá-lo com o branch master:

 git pull origin changes

Envie esta mesclagem ao vivo para o branch mestre:

 git push origin master

Use Git Merge em vez disso

Para mesclar um branch com o mestre usando o comando merge :

Migrar para o branch master:

 git checkout master

Mesclar com o branch ( alterações ):

 git merge changes

Em seguida, envie a mesclagem ao vivo para o branch master:

 git push origin master

Certifique-se de substituir as alterações pelo nome de sua filial.

Assim que a fusão for bem-sucedida, você pode excluir o branch local e remotamente se não precisar mais dele:

Relacionado: Como renomear um branch no Git

Git Rebase

Se você tiver vários branches com commits desatualizados, você pode rebase ou refocar o head / refs desses branches para herdar o head / refs de um atualizado.

Rebasing, portanto, é útil quando você precisa atualizar alguns branches com a base de um atual.

Rebasing não deve ser uma ação frequente, no entanto, especialmente se você estiver trabalhando com uma equipe, pois pode interromper todo o fluxo de trabalho. Mas se você trabalha sozinho e está familiarizado com seu fluxo de trabalho e branches, o rebasing não deve causar estragos se você souber onde e como usá-lo.

Por exemplo, suponha que você tenha dois ramos; branch1 e branch2. Agora, você não fez nenhuma alteração no branch1 por algum tempo. Mas você confirma consistentemente as mudanças para o branch2, inclusive recentemente.

Então você decidiu transportar branch1 junto com o fluxo. Rebasing branch1 para branch2, portanto, significa que você está dizendo ao branch1 para ignorar seus commits anteriores e herdar o commit recente feito para branch2.

Veja como você pode fazer isso:

Mudar para a filial abandonada (branch1):

 git checkout branch1

Em seguida, rebase o branch1 para o branch2 atualizado:

 git rebase branch2

Git Squash

O Git squash permite mesclar vários commits em um. Ajuda quando você executa git commit muitas vezes em uma única atualização. Um exemplo prático é quando cada correção de bug ou refatoração de código para um único recurso tem um commit separado.

Mas você pode não querer empurrar o commit HEAD com os que o acompanham, pois todos eles têm o mesmo propósito. Uma abordagem recomendada é comprimi-los em um para evitar confusão ao rastrear commits.

A melhor maneira de esmagar os commits é por meio do modo de rebase interativo. Dê uma olhada no exemplo abaixo para entender melhor.

Neste exemplo, suponha que você tenha cinco correções de bug. E há um commit para cada um deles. Veja como você pode compactar esses cinco commits em um:

Execute git reflog para visualizar o código hash de seus commits:

 git reflog

Aqui está o resultado neste caso:

Agora seu objetivo é esmagar os últimos cinco commits, começando com a primeira correção até a quinta correção .

Para fazer isso, copie o código hash do commit logo abaixo da primeira correção ( 0a83962 ). Em seguida, pressione Q para sair do reflog .

Agora execute git rebase –interactive naquele hash.

 git rebase --interactive 0a83962

O Git então abre um arquivo de rebase interativo semelhante a este:

Para esmagar os commits, excluindo a primeira correção , substitua pick por s para cada um dos outros commits:

Salve e feche este arquivo.

Outro arquivo é aberto para você renomear o commit compactado:

Limpe-os e digite um nome preferido para o commit compactado:

Salve esse arquivo. Em seguida, feche-o e você receberá uma mensagem de sucesso em seu terminal.

Nota: O arquivo interativo pode abrir dentro do terminal. Mas se você estiver no Windows, pode forçar seu terminal a abrir arquivos globalmente em seu editor de texto favorito para facilitar a compactação.

Para fazer isso, abra sua linha de comando e execute:

 git config --global core.editor "'path to choice text editor' -n -w"

Git Fork vs. Clone Git

Bifurcação e clonagem são dois termos diferentes no Git. Você não pode bifurcar seu repositório, pois ele já está lá com você. Você pode, entretanto, bifurcar o repositório de outras pessoas e cloná-lo posteriormente.

Bifurcar um repositório significa que você está pegando uma cópia do repositório de alguém e tornando-o seu. Depois de obter uma cópia desse repositório, você pode cloná-lo como faria com qualquer um de seus repositórios git para alterações locais.

Veja como clonar um repositório remoto no GitHub e iniciar um download para seu diretório local:

 git clone https://github.com/username/repository_name.git/

Restaurar um arquivo ao seu estado padrão

Se quiser limpar as alterações em um arquivo após o último commit, você pode usar o comando git restore :

 git restore filename

Emendar um compromisso

Você pode voltar a um commit anterior se esquecer de fazer alterações em alguns arquivos enquanto os prepara.

Faça alterações no arquivo que você esqueceu. Em seguida, use o git alteração para revisar um commit:

 git add file_forgotten
git commit --amend

Arquivos Unstage

Você pode remover arquivos específicos que você preparou para um commit usando o comando git rm :

 git rm --cached filename

Você também pode remover vários arquivos de uma vez:

 git rm --cached file1 file2 file3 file4

Lembre-se de anexar a extensão de arquivo relevante a qualquer arquivo que você está isentando. Por exemplo, um arquivo de texto simples deve ser filename.txt .

Relacionado: Como limpar o Git e remover arquivos não rastreados

Git Reset

Usar git reset é útil se você quiser descartar todos os arquivos que você testou para um commit de uma vez:

 git reset

Git reset HEAD, entretanto, aponta o HEAD de um branch para um commit específico em sua árvore de trabalho. Por exemplo, se você ainda não enviou seu commit atual, você pode voltar para o commit enviado recentemente:

 git reset --soft HEAD~1

Substitua –soft por –hard se você já enviou o commit atual:

 git reset --hard HEAD~1

Git Reverter

Ao contrário do comando reset , git revert mantém a integridade do seu histórico de commits. É útil se você deseja alterar um commit devido a erros ou bugs.

Ele não abandona o commit de destino ou faz um novo. Em vez disso, ele reverte para as alterações recentes feitas sem deletar ou renomear tal commit. É uma ótima maneira de manter seus commits mais limpos, além de ser mais seguro do que zerar o tempo todo.

Para reverter para um commit:

 git revert HEAD~1

Onde HEAD ~ 1 aponta para um commit específico em sua árvore de trabalho.

Excluir um arquivo rastreado ou um diretório

Você pode usar git rm -f para excluir qualquer arquivo rastreado em sua árvore de trabalho. Observe, no entanto, que o Git não pode remover arquivos não rastreados, pois não os armazena em cache.

Para excluir um arquivo de teste:

 git rm -f filename

Para remover uma pasta preparada:

 git rm -r -f foldername

Git Logging

Para visualizar seus registros de commit e histórico no Git:

 git log

Para registrar as atividades em um ramo específico:

 git log branch_name

Relacionado: Como inspecionar o histórico de um projeto com git log

Às vezes, você pode querer reverter para um commit abandonado. Portanto, para ver os commits abandonados, incluindo os relevantes:

 git reflog

Para ver os logs de referência de um branch específico:

 git reflog branch_name

Gerencie suas versões de projeto como um profissional com Git

Com o Git oferecendo muitas vantagens, você pode gerenciar os lançamentos de seu projeto remotamente, sem roubar arquivos e pastas locais em seu branch principal. Além disso, permite que você execute projetos facilmente com uma equipe.

Como você viu, o Git possui muitos recursos que você pode explorar. Mas tome cuidado ao usar esses recursos propositalmente. Caso contrário, você pode acabar quebrando coisas. Dito isso, você ainda pode criar um repositório remoto de demonstração e brincar com esses recursos.