Mettre à jour la date de l'auteur de la validation git lors de la modification

305

Je me suis retrouvé à modifier mes engagements assez souvent. Je ne le fais pas stashtellement parce que j'ai tendance à oublier que je l'ai fait, surtout quand je veux sauvegarder ce que j'ai fait avant de partir ou avant un week-end, donc je fais un "draft" commit. La seule chose est que lorsque je modifie le commit, il est toujours défini sur la date d'origine de l'auteur. Existe-t-il un moyen (simple) de le mettre à jour lors de la modification?

ksol
la source
5
Cela est particulièrement utile lorsque vous effectuez un rebase interactif et que GitHub affiche les validations dans la requête Pull dans l'arborescence au lieu de l'ordre des dates.
Sukima

Réponses:

368

Vous pouvez modifier la date de l'auteur avec le --dateparamètre sur git commit. Donc, si vous souhaitez modifier le dernier commit et mettre à jour sa date d'auteur à la date et l'heure actuelles, vous pouvez faire:

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

(Le -Rparamètre à lui dateindique de sortir la date au format RFC 2822. C'est l'un des formats de date compris pargit commit .)

Mark Longair
la source
27
FTR, ressemble à OS X, datene sait pas -R. L'utilisation datesans options a quand même fait l'affaire
ksol
7
Notez que si vous le voulez comme alias, vous devez ajouter un !et échapper aux guillemets, par exemplecan = !git commit --amend --date=\"$(date -R)\"
Fabian Steeg
9
date -Rne fonctionne pas sur OSX, utilisez à la date +%splace
cachez le
4
Idem pour FreeBSD:git commit --amend --date="$(date +%s)"
Dereckson
120
git commit --amend --date=nowfonctionne aussi. Pas besoin d'appeler un sous-shell avec la commande date (1) . Vous pouvez le voir dans le code source de git (1) dans date.c 'now' est une valeur spéciale qui est convertie en utilisant la fonction date_now (). Idem pour «midi», «hier», «minuit», «thé» et d'autres répertoriés dans le tableau de structure spécial [].
sbz
267

Une autre façon de procéder est

git commit --amend --reset-author

Cela change l'auteur de la validation ainsi que la date - mais si c'était à l'origine votre validation non poussée, c'est un no-op.

Vous pouvez également ajouter --no-editsi vous souhaitez mettre à jour la date sur plusieurs validations mais que les messages de validation restent intacts. De cette façon, vous ne serez pas invité à modifier le message pour chaque validation.

Rup
la source
4
Je me demande pourquoi ce comportement n'est pas par défaut et devrait être spécifié explicitement. C'est très surprenant et entraîne des conséquences potentiellement mauvaises. Dans ma compréhension, les git commit --amend changements sont validés plutôt que de simples ajustements ou quelque chose comme ça, c'est-à-dire qu'il en résulte un historique différent des changements de contenu du référentiel où tout système de contrôle de version est très strict. Et en tant que tel, je m'attends intuitivement à ce que l'auteur et la date correspondent aux données de validation réelles. La paternité est particulièrement importante, pas même la date. Votez ce commentaire si vous voulez battre les développeurs git responsables d'un tel défaut. :)
Artem Pisarenko
258

Depuis Git v2.1.4 (testé sur Debian 8 (Jessie))

git commit --amend --date=now
Kamal
la source
8
Et si vous ne voulez plus voir le message de validation, ajoutez --no-edit.
Henrik N
12

J'aime la réponse de Mark et je l'ai utilisée plusieurs fois moi-même, mais maintenant je suis sur OS X et ce date -Rn'est pas pris en charge. Mais tout est beaucoup plus facile que la réponse originale nous l'avait fait penser, utilisez simplement une chaîne vide !

git commit --date= --amend
JLarky
la source
6
Ça ne marche pas. Git abandonne avec l'erreurfatal: invalid date format:
Nikos C.
A travaillé pour moi (sous Windows, Git 1.9.4)
Csq
1
Mieux vaut utiliser --date="$(date)"sous OS X. L'option -Rest GNUism.
Rudá Moura
0

J'ai créé ce package npm si quelqu'un cherche toujours un moyen simple de modifier les dates de plusieurs validations.

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

Usage:

npm install -g git-change-date
cd [your-directory]
git-change-date
Kareem Elbahrawy
la source
17
Faut-il vraiment un autre npmpackage? Non, apprenez à utiliser la gitcommande telle quelle .
Urda