Aggiorna la data dell'autore del commit git durante la modifica


305

Mi sono ritrovato a modificare i miei commit abbastanza spesso. Non stashtanto perché tendo a dimenticare di averlo fatto, soprattutto quando voglio salvare ciò che ho fatto prima di partire o prima di un fine settimana, quindi faccio un "progetto" di commit. L'unica cosa è che, quando modifico il commit, è ancora impostato sulla data dell'autore originale. Esiste un modo (semplice) per aggiornarlo durante la modifica?


5
Ciò è particolarmente utile quando si esegue un rebase interattivo e si prevede che GitHub visualizzi i commit nella richiesta pull nell'ordine dell'albero anziché nell'ordine della data.
Sukima,

Risposte:


368

È possibile modificare la data dell'autore con il --dateparametro su git commit. Pertanto, se si desidera modificare l'ultimo commit e aggiornare la data dell'autore alla data e ora correnti, è possibile eseguire:

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

(Il -Rparametro per datedirgli di produrre la data nel formato RFC 2822. Questo è uno dei formati data compresi dagit commit .)


27
FTR, sembra su OS X, datenon lo sa -R. L'utilizzo datesenza opzioni ha comunque funzionato
ksol il

7
Nota che se vuoi questo come alias devi aggiungere un !e sfuggire alle virgolette, ad esempiocan = !git commit --amend --date=\"$(date -R)\"
Fabian Steeg,

9
date -Rnon funziona su OSX, usa date +%sinvece
nascondi il

4
Idem per FreeBSD:git commit --amend --date="$(date +%s)"
Dereckson,

120
git commit --amend --date=nowfunziona anche. Non è necessario richiamare una subshell con il comando date (1) . Puoi vederlo nel codice sorgente di git (1) in date.c 'now' è un valore speciale che viene convertito usando la funzione date_now (). Lo stesso vale per "mezzogiorno", "ieri", "mezzanotte", "tè" e altri elencati nella struttura array special [].
sbz,

267

Un altro modo per farlo è

git commit --amend --reset-author

Ciò modifica sia l'autore del commit che la data, ma se era originariamente il commit non eseguito, allora è una no-op.

È inoltre possibile aggiungere --no-editse si desidera aggiornare la data su più commit ma si desidera che i messaggi di commit rimangano invariati. In questo modo non verrà richiesto di modificare il messaggio per ciascun commit.


4
Mi chiedo perché questo comportamento non sia predefinito e debba essere specificato esplicitamente. È molto sorprendente e porta a conseguenze potenzialmente negative. Nella mia comprensione, le git commit --amend modifiche si impegnano piuttosto che solo modifiche o qualcosa del genere, ovvero si traducono in una diversa cronologia delle modifiche al contenuto del repository in cui qualsiasi sistema di controllo della versione è molto rigido. E come tale mi aspetto intuitivamente che sia l'autore sia la data corrispondano ai dati di commit effettivi. Soprattutto la paternità è importante, nemmeno la data. Vota questo commento se vuoi battere gli sviluppatori git responsabili di tale inadempienza. :)
Artem Pisarenko,

258

A partire da Git v2.1.4 (testato su Debian 8 (Jessie))

git commit --amend --date=now

8
E se non si desidera visualizzare nuovamente il messaggio di commit, aggiungere --no-edit.
Henrik N,

12

Mi piace la risposta di Mark e l'ho usata da sola più volte, ma ora sono su OS X e date -Rnon è supportata. Ma tutto è molto più semplice della risposta originale ci ha fatto pensare, basta usare una stringa vuota !

git commit --date= --amend

6
Non funziona Git si interrompe con l'errorefatal: invalid date format:
Nikos C.

Ha funzionato per me (su Windows, Git 1.9.4)
Csq

1
Meglio usare --date="$(date)"in OS X. L'opzione -Rè GNUism.
Rudá Moura

0

Ho creato questo pacchetto npm se qualcuno sta ancora cercando un modo semplice per modificare le date di più commit.

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

Uso:

npm install -g git-change-date
cd [your-directory]
git-change-date

17
Uno ha davvero bisogno di un altro npmpacchetto? No, impara come usare il gitcomando così com'è.
Urda,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.