Skip to content

Instantly share code, notes, and snippets.

@gustavomdsantos
Last active February 17, 2017 22:24
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save gustavomdsantos/64c7ae186b21648ed8aa to your computer and use it in GitHub Desktop.
Save gustavomdsantos/64c7ae186b21648ed8aa to your computer and use it in GitHub Desktop.
Git rebase, format-branch command examples
git rebase -i 1ec6d533d8555bbe72cec3881aba8a4433044a2a # SHA hash do commit "HEAD temporário" (commit anterior ao desejado para modificar!)
git log --format=fuller #Ver todos os commits com todas as informações
# "Commit amending" com mesmo autor (dentro de um "edit" do Rebase)
GIT_COMMITTER_DATE="Mon Apr 20 18:54:39 2015 -0300" git commit --date="Mon Apr 20 18:54:39 2015 -0300" --amend
# "Commit amending" com autor diferente (dentro de um "edit" do Rebase)
GIT_COMMITTER_NAME="Username desejado como exibido no git log" GIT_COMMITTER_EMAIL="email_da@pessoa.com" GIT_COMMITTER_DATE="Fri May 22 00:52:37 2015 -0300" git commit --author="Username desejado como exibido no git log <email_da@pessoa.com>" --date="Fri May 22 00:52:37 2015 -0300" --amend
# Após o "amending", confirme o Rebasing:
git rebase --continue
# Format-branch para modificar campo "Commiter" e "CommiterDate" modificado após um rebasing
git filter-branch -f --env-filter 'GIT_COMMITTER_DATE=$GIT_AUTHOR_DATE && GIT_COMMITTER_NAME=$GIT_AUTHOR_NAME && GIT_COMMITTER_EMAIL=$GIT_AUTHOR_EMAIL && export GIT_COMMITTER_DATE GIT_COMMITTER_NAME GIT_COMMITTER_EMAIL'
# Format-branch para deixar commits reescritos com `amending` com a data mais recente da modificação
# (ao invés da data inicial de criação do commit)
git filter-branch -f --env-filter 'GIT_AUTHOR_DATE=$GIT_COMMITTER_DATE && export GIT_AUTHOR_DATE'
# Modificar a mensagem de commit inicial vazia de um GitHub Gist (não funciona
# `git rebase -i --root`:
# Código reusado de:
# http://stackoverflow.com/a/14091160
# http://stackoverflow.com/a/15470598
git checkout $(git log --pretty=format:%H | tail -1) && git commit --amend && git rebase HEAD master
# Renomear nome de autor e email incorretos em commits já feitos anteriormente
# Consertando erro feito por causa de um Git mal configurado:
# Código reusado de:
# http://schacon.github.io/git/git-filter-branch.html
git filter-branch --env-filter '
if [ "$GIT_AUTHOR_NAME" = "alunoinf" ];
then
GIT_AUTHOR_NAME="RenanOfugi";
GIT_COMMITTER_NAME=$GIT_AUTHOR_NAME;
GIT_AUTHOR_EMAIL="renangyn2010@hotmail.com";
GIT_COMMITTER_EMAIL=$GIT_AUTHOR_EMAIL;
fi' HEAD
# O exemplo acima renomeará todos os commits que tiverem o autor "alunoinf" para "RenanOfugi", com o email "renangyn2010@hotmail.com".
# Renomear um arquivo e manter o seu histórico intacto (renomeia em todos os commits no histórico):
# Código reusado de:
# http://stackoverflow.com/a/15135004
git filter-branch --tree-filter 'if [ -f old ]; then mkdir dir && mv old dir/new; fi' HEAD
# Ou... exemplo:
git filter-branch -f --tree-filter 'if [ -f "Plano de Gerência de Configuração.md" ]; then mv "Plano de Gerência de Configuração.md" "Plano-de-Gerência-de-Configuração.md"; fi' HEAD
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment