Alterar carimbos de data / hora ao rebasar o branch git

97

Eu reorganizei os commits em um branch antes de ser tornado público, fazendo com que os timestamps dos commits fiquem em uma ordem confusa. Eu preferia que todos estivessem hoje com apenas alguns segundos entre eles.

Obviamente, esses carimbos de hora também não estarão corretos, mas como é o momento em que as coisas vão a público, prefiro isso a uma história confusa em termos de tempo.

Então, como faço para dizer ao git para criar novos timestamps durante o rebasing?

Tarso
fonte

Respostas:

134
git rebase --ignore-date
Michael Krelin - hacker
fonte
2
Eu tentei antes de postar .. Exceto por não ter feito isso interativamente, talvez seja esse o truque? Além disso, você tentou o alias --committer-date-is-author-date? Talvez o --ignore-date tenha sido introduzido em uma versão posterior, não tenho ideia.
Michael Krelin - hacker de
2
Sim, se feito de forma não interativa, funciona. Mas então - como sempre com o rebase - o primeiro commit não é afetado.
tarsius
2
@ MichaelKrelin-hacker: de acordo com a documentação, --ignore-date Essas sinalizações são passadas para git am para alterar facilmente as datas dos commits com rebase (veja git-am [1]). Incompatível com a opção --interactive.
Tim
4
@Tim O commit do root não tem um pai, e quando fiz esta pergunta, também queria mudar a data desse commit. Agora temos --root, o que torna isso possível.
tarsius
3
Incompatible with the --interactive option. Ver documentos
Vlastimil Ovčáčík
28

No meu caso, o rebasing alterou timestamps para o valor CommitDate, então no gitweb vários commits de meses atrás apareciam com 4 dias. Encontrei o último commit com a data correta e fiz:

$ git rebase --committer-date-is-author-date SHA
lkraav
fonte
39
Não, não é. Na verdade, é exatamente o oposto. Dos documentos de git rebase: " Esses sinalizadores são passados ​​para git amalterar facilmente as datas dos commits com base em rebase ". No git amque diz: --committer-date-is-author-date" [...] permite que o usuário mentira sobre a data committer usando o mesmo valor que a data de autor ", enquanto --ignore-date" [...] permite que o usuário mentira sobre a data autor usando o mesmo valor como a data do committer ".
Enrico Campidoglio
9

Existem as seguintes maneiras

  1. Rebase normal

    git rebase --ignore-date
    
  2. Rebase interativo

    git rebase -i master
    git commit --amend --date=now
    git push origin <branch> -f
    
Umar Asghar
fonte