Comandos usados com frequência

Alguns comandos do Git que uso com frequência, mas às vezes continuo esquecendo.

Restore

Restaurar um arquivo

git restore --source <branch_name> <file_relative_path>

Restaurar para a branch main

git restore --source main pages/docs/index.tsx

Restaurar para o último commit na main

git restore --source master~1 pages/docs/index.tsx

Restaurar para o último commit na branch atual

git restore -source=HEAD~1 pages/docs/index.tsx

Restaurar uma pasta

git restore --source <branch_name> <folder_relative_path>
git restore -source=HEAD~1 pages/docs

referências : git-tower

Rebase

Iniciar um rebase

git rebase <upstream> <branch_name>

Fazer pull com rebase

git pull --rebase <upstream> <branch_name>

Depois de resolver os conflitos e adicionar ao stage

git rebase --continue

Para cancelar o processo de rebase

git rebase --abort

referências : git docs

Mover o último commit para outra branch

Quando você commita por engano na branch_a, mas na verdade queria commitar na branch_b

git checkout branch_a
git reset HEAD~1

git checkout -b branch_b
# ou
git checkout branch_b

git add --all
git commit -m "commit message"

Remover uma tag criada

git tag -d <tag_name>

Renomear uma tag

Criar um alias da tag com um novo nome

git tag old_name new_name

Remover a tag antiga localmente

git tag -d old_name

Remover a tag no remoto, com um checkout

git remote -v

O terceiro argumento é o seu repositório remoto. No nosso exemplo, origin

git push origin :refs/tags/old_name

Por fim, adicione a nova tag ao repositório remoto. A nova tag só será adicionada depois disso.

git push origin --tags

Repita esse processo em todos os remotos.

referência: stackoverflow

Usar uma chave SSH para assinar um commit

Isso só funciona com git 2.34.0 ou mais recente e openssh 8.0 ou mais recente.

Configure o git para usar SSH na assinatura de commits e diga ao git qual chave deve ser usada

git config --global gpg.format ssh
git config --global user.signingkey ~/.ssh/examplekey

Use a flag -S ao assinar seus commits:

git commit -S -m "My commit message"

Ou diga ao git para assinar seus commits automaticamente

git config --global commit.gpgsign true

Usar GPG para assinar um commit

Listar todas as suas chaves

gpg --list-secret-keys | grep ^sec
sec   3185S/7DD21DBA 2014-05-06 [expires: 2015-05-05]
#           ^^^^^^^^

Precisamos desse valor hexadecimal depois da barra. Adicione esse valor à sua configuração do git.

git config --global user.signingkey 7DD21DBA

Substitua 7DD21DBA pelo valor hexadecimal do último comando. Para usar essa chave em apenas um repositório, rode o último comando sem o --global. Ao fazer um commit, adicione a opção -s.

git commit -S -m 'Testing an signed commit.'

Para confirmar:

git log --show-signature

Obtendo a diferença entre dois repositórios

# vá até o repo_a
cd /home/user/repo_a

# adicione o repo_b como um remoto
git remote add -f b /home/user/repo_b

# veja as diferenças na branch main
git diff main remotes/b/main

# quando terminar, remova o remoto
git remote rm b

referência: git: getting the difference between two repositories