Dicas de git (snippets)
Criar uma branch vazia com nome “maven-repo”
git clone https://github.com/mhagnumdw/pippo.git
cd pippo/
git checkout --orphan maven-repo
git rm -rf .
git commit --allow-empty -m "Apagando todos os arquivos da branch para servir de repositório maven"
git push origin maven-repo
Visualizar exclusivamente os commits feitos em uma branch em relação ao master
git branch
git checkout feature
git cherry -v master
Diferença de commits entre duas branches
git log --oneline origin/master..HEAD
# ou
diff -y <(git log --oneline -10) <(git log --oneline origin/master -10)
Merge entre branches de repositórios diferentes
Se você quiser fazer um merge de project-a para project-b:
cd path/to/project-b
git remote add project-a path/to/project-a
git fetch project-a
git merge --allow-unrelated-histories project-a/master
git remote remove project-a
https://stackoverflow.com/questions/1425892/how-do-you-merge-two-git-repositories#answer-10548919
Listar os autores em um projeto
git shortlog --summary --numbered --email
Adicionar ao stash sem remover do workspace
git stash push --include-untracked \
--message 'Melhoria do autocomplete usando rxjs - v001' && \
git stash apply
Obter um arquivo específico de um stash
# listar stashs
git stash list
# listar os arquivos de um stash
git stash show stash@{0}
# ver o conteúdo do arquivo
git show stash@{0}:src/main/java/br/log/AlertsManager.java
# obter o arquivo para o workspace
git checkout stash@{0} -- src/main/java/br/log/AlertsManager.java
Deletar branch local e remota
# deletar branch remota
git push --delete origin angular_gitlab_build_problem
# deletar branch local
git branch -d angular_gitlab_build_problem
Buscar no conteúdo dos arquivos em todo o histórico
Buscar um texto em todos os arquivos em todo o histórico.
# achar o bloco de código sem se importar com o arquivo
git log --patch | grep -P -B 20 -A 3 '(addShutdownHook|threadToDeleteOnExit)'
# achar os commits que possuem os arquivos com o termo buscado
git log -SaddShutdownHook --name-status
git log -GaddShutdownHook --name-status
# após o S e G deve ser o termo buscado, que pode estar entre aspas simples
# a opção G aceita regex
Exibir o autor no git rebase -i
git config --add rebase.instructionFormat "(%an <%ae>) %s"
# ou global
git config --global rebase.instructionFormat "(%an <%ae>) %s"
Exibir o autor no estilo git log --oneline
git log --pretty=format:"%C(yellow)%h %C(auto,magenta)%>(12)[%ad] %Cgreen%<(7)%aN (%aE)%Cred%d %Creset%s" --date=format:"%d/%m/%Y %H:%M:%S"
Criar um alias para evitar toda essa linha:
# definir globalmente um alias chamado logp
git config --global alias.logp 'log --pretty=format:"%C(yellow)%h %C(auto,magenta)%>(12)[%ad] %Cgreen%<(7)%aN (%aE)%Cred%d %Creset%s" --date=format:"%d/%m/%Y %H:%M:%S"'
# agora basta
git logp
git logp -5
git logp origin/master..
Checkout por data e hora
git checkout `git rev-list -n 1 --before="2021-03-24 17:00" master`
Observação: é possível ver por aí, pesquisando na net, a solução git checkout master@{2021-03-24 17:00}
, não vai funcionar bem, porque ele usa o reflog (que expira depois de algum tempo).
ref: http://web.archive.org/web/20170303015800/http://bramschoenmakers.nl/en/node/645
git log
por data e hora
# ex1
git log --oneline --after="2020-01-01 00:00"
# ex2
git log --oneline --before="2020-01-01 00:00"