WIP: A descrição e explicação dos comandos está sendo postada aqui conforme o avanço.
levels
Main
Módulo: Acelerando
1: Solte a sua cabeça
Dificuldade (pra mim!): fácil
- HEAD é um nome simbólico para o commit atualmente ativo (que sofreu checkout por último) -- é essencialmente o commit sobre o qual você está trabalhando no momento.
- O HEAD sempre aponta para o commit mais recentemente copiado sobre a árvore de trabalho (arquivos do projeto).
- Normalmente o HEAD aponta para o nome de um branch (por exemplo, bugFix). Quando você commita, o status do bugFix é alterado e essa mudança ocorre também sobre o HEAD.
- Soltar o HEAD significa anexá-lo a um commit em vez de anexá-lo a um branch. Antes do estado solto ("detached"), é assim como se parece:
HEAD -> main -> C1
- Depois do comando
git checkout C1
, fica:
HEAD -> C1
2: Referências relativas (^
)
Dificuldade (pra mim!): fácil
- Mover-se pela árvore do Git especificando o hash do commit pode se tornar um pouco entediante. No mundo real, você não terá à sua disposição essa bonita visualização da árvore ao lado do seu terminal, então você terá de usar o comando
git log
para ver os hashes. - Além disso, os hashes são geralmente muito maiores no mundo real. Por exemplo, o hash do commit que introduziu o nível de exercícios anterior é
fed2da64c0efc5293610bdd892f82a58e8cbc5d8
. Não é algo exatamente fácil de lembrar. - O que salva é que o Git é inteligente com os hashes. Ele só exige que você especifique a quantidade de caracteres do hash suficiente para identificar unicamente o commit.
- Com referências relativas, você pode começar a partir de um ponto fácil de lembrar (como o branch
bugFix
ou oHEAD
) e referenciar a partir dali. - Commits relativos são poderosos, mas vamos introduzir apenas dois tipos simples aqui:
- Mover para cima um commit por vez com
^
- Mover para cima um número de vezes com
~<num>
- Mover para cima um commit por vez com
- Vamos dar uma olhada no operador circunflexo (
^
) primeiro. Cada vez que você adicioná-lo a um nome de referência, você está dizendo ao Git para encontrar o pai do commit especificado. - Então, dizer
main^
é equivalente a "o primeiro pai do main". -
main^^
é o avô (ancestral de segunda geração) do main
3: Referências relativas #2 (~
)
Dificuldade (pra mim!): difícil
- Digamos que você queira se mover vários níveis para cima na árvore de commits. Pode ser entediante digitar
^
várias vezes, e por isso o Git possui também o operador til (~
). - Um número pode ser passado (opcionalmente) após o operador til, especificando o número de ancestrais que você deseja subir.
- Uma das situações mais comuns na qual eu uso referências relativas é quando quero trocar branches de lugar. Você pode redefinir diretamente o commit para o qual um branch aponta com a opção
-f
. Desta forma, o seguinte comando:
git branch -f main HEAD~3
- Move (à força) o branch main 3 ancestrais acima do HEAD.
4: Referências relativas #3 (~
)
Dificuldade (pra mim!): médio
- Existem várias maneiras de reverter mudanças no Git. E assim como o ato de commitar, reverter mudanças no Git também tem um componente de baixo nível (a preparação, ou staging, de arquivos ou trechos de arquivos individuais) e um componente de alto nível (como as mudanças são, de fato, revertidas).
- Há duas maneiras principais de desfazer mudanças no Git -- uma delas é usando
git reset
, e a outra é usandogit revert
. Vamos olhar cada uma delas na próxima janela - O comando
git reset
reverte mudanças movendo para trás no tempo (para um commit mais antigo) a referência do branch. Desta forma, você pode pensar nessa operação como uma "reescrita do histórico"; ogit reset
vai mover o branch para trás como se o commit nunca tivesse existido. - Embora o reset funcione muito bem em branches locais no seu próprio computador, o método utilizado de "reescrever o histórico" não funciona com branches remotos que outras pessoas estejam usando.
- Para reverter mudanças e conseguir compartilhar essas mudanças com os outros, precisamos usar o
git revert
. - Quando usamos o
revert
um novo commit é criado A FRENTE na árvore. Isso é porque o novo commit C2' introduz mudanças -- acontece que as mudanças que ele introduz revertem exatamente aquelas do commit C2. - Com o
revert
, você pode fazer push das suas mudanças para compartilhá-las com os outros.
Top comments (0)