Atualizar data do autor de confirmação do git ao alterar

305

Eu me vi alterando meus commits com bastante frequência. Eu não faço stashmuito porque costumo esquecer que o fiz, especialmente quando quero salvar o que fiz antes de sair ou antes de um fim de semana, então faço um commit "rascunho". A única coisa é que, quando eu altero o commit, ele ainda está definido como a data do autor original. Existe uma maneira (simples) de atualizá-lo ao alterar?

ksol
fonte
5
Isso é especialmente útil quando você executa uma nova refazer interativa e espera que o GitHub exiba as confirmações na solicitação de recebimento em ordem de árvore, em vez de ordem de data.
Sukima 15/03/19

Respostas:

368

Você pode alterar a data de autor com o --dateparâmetro para git commit. Portanto, se você deseja alterar a última confirmação e atualizar a data do autor para a data e hora atuais, é possível:

git commit --amend --date="$(date -R)"

(O -Rparâmetro para dateinforma a saída da data no formato RFC 2822. Este é um dos formatos de data compreendidos porgit commit .)

Mark Longair
fonte
27
FTR, parece no OS X, datenão sabe -R. Usando datesem opções que o trabalho de qualquer maneira
ksol
7
Note que se você quer este como um alias você precisa adicionar um !e escapar as aspas, por exemplocan = !git commit --amend --date=\"$(date -R)\"
Fabian Steeg
9
date -Rnão funciona no OSX, use em date +%svez disso
stash
4
Idem para FreeBSD:git commit --amend --date="$(date +%s)"
Dereckson 12/02
120
git commit --amend --date=nowfunciona também. Não há necessidade de chamar um subshell com o comando date (1) . Você pode vê-lo no código fonte do git (1) em date.c 'now' é um valor especial que é convertido usando a função date_now (). O mesmo para 'meio-dia', 'ontem', 'meia-noite', 'chá' e outros listados na matriz de estrutura especial [].
Sbz 29/07
267

Outra maneira de fazer isso é

git commit --amend --reset-author

Isso muda o autor da confirmação, bem como a data - mas se foi originalmente sua confirmação não enviada, isso não é possível.

Você também pode adicionar --no-editse deseja atualizar a data em várias confirmações, mas deseja que as mensagens de confirmação permaneçam intocadas. Dessa forma, você não será solicitado a editar a mensagem para cada confirmação.

Rup
fonte
4
Gostaria de saber por que esse comportamento não é padrão e deve ser especificado explicitamente. É muito surpreendente e leva a consequências potencialmente ruins. No meu entendimento, as git commit --amend alterações confirmam em vez de apenas ajustes ou algo assim, ou seja, resulta em um histórico diferente de alterações no conteúdo do repositório, onde qualquer sistema de controle de versão é muito rigoroso. E, como tal, espero intuitivamente que o autor e a data correspondam aos dados reais de confirmação. Especialmente a autoria é importante, nem mesmo a data. Vote neste comentário se você quiser vencer os desenvolvedores git responsáveis ​​por esse padrão. :)
Artem Pisarenko
258

A partir do Git v2.1.4 (testado no Debian 8 (Jessie))

git commit --amend --date=now
Kamal
fonte
8
E se você não quiser ver a mensagem de confirmação novamente, adicione --no-edit.
Henrik N
12

Eu gosto da resposta de Mark e a usei várias vezes, mas agora estou no OS X e date -Rnão é suportado. Mas tudo é muito mais fácil do que a resposta original nos fez pensar, basta usar uma string vazia !

git commit --date= --amend
JLarky
fonte
6
Isso não funciona. O Git aborta com o erro #fatal: invalid date format:
Nikos C.
Trabalhou para mim (no Windows, Git 1.9.4)
Csq
1
Melhor usar --date="$(date)"no OS X. A opção -Ré GNUism.
Rudá Moura
0

Criei este pacote npm se alguém ainda estiver procurando uma maneira simples de alterar datas de vários commits.

https://github.com/bitriddler/git-change-date

Uso:

npm install -g git-change-date
cd [your-directory]
git-change-date
Kareem Elbahrawy
fonte
17
Alguém realmente precisa de outro npmpacote? Não, aprenda como usar o gitcomando como está.
Urda