Question Comment peut-on changer l'horodatage d'un ancien commit dans Git?


Les réponses à Comment modifier les validations existantes et non supprimées? décrire un moyen de modifier les messages de validation précédents qui n'ont pas encore été envoyés en amont. Les nouveaux messages héritent des horodatages des validations d'origine. Cela semble logique, mais y a-t-il un moyen de redéfinir les temps?


571
2018-01-18 06:13


origine


Réponses:


Utilisation git filter-branch avec un filtre d'environnement qui définit GIT_AUTHOR_DATE et GIT_COMMITTER_DATE pour le hachage spécifique du commit que vous cherchez à corriger.

Cela invalidera cela et tous les futurs hashs.

Exemple:

Si vous vouliez changer le Rendez-vous de commettre 119f9ecf58069b265ab22f1f97d2b648faf932e0, vous pourriez le faire avec quelque chose comme ceci:

git filter-branch --env-filter \
    'if [ $GIT_COMMIT = 119f9ecf58069b265ab22f1f97d2b648faf932e0 ]
     then
         export GIT_AUTHOR_DATE="Fri Jan 2 21:38:53 2009 -0800"
         export GIT_COMMITTER_DATE="Sat May 19 01:01:01 2007 -0700"
     fi'

422
2018-01-18 06:48



Vous pouvez faire un rebasage interactif et choisir modifier pour le commit dont vous souhaitez modifier la date. Lorsque le processus de rebasage s'arrête pour modifier la validation que vous tapez, par exemple:

git commit --amend --date="Wed Feb 16 14:00 2011 +0100"

Ensuite, vous continuez votre rebase interactif.

METTRE À JOUR (en réponse au commentaire de studgeek): pour changer la date de validation au lieu de la date de l'auteur:

GIT_COMMITTER_DATE="Wed Feb 16 14:00 2011 +0100" git commit --amend

Les lignes ci-dessus définissent une variable d'environnement GIT_COMMITTER_DATE qui est utilisée dans modifier commit.

Tout est testé dans Git Bash.


613
2018-02-16 13:50



Une meilleure façon de gérer toutes ces suggestions dans une commande est

LC_ALL=C GIT_COMMITTER_DATE="$(date)" git commit --amend --no-edit --date "$(date)"

Cela définira la date de validation et d'auteur de la dernière validation sur "maintenant".


337
2018-03-14 11:32



Faites juste git commit --amend --reset-author --no-edit. Pour les commits plus anciens, vous pouvez faire un rebasage interactif et choisir edit pour le commit dont vous voulez modifier la date.

git rebase -i <ref>

Puis modifiez le commit avec --reset-author et --no-edit pour changer la date de l'auteur à la date actuelle:

git commit --amend --reset-author --no-edit

Enfin, continuez avec votre rebase interactif:

git rebase --continue

127
2017-07-21 13:25



J'ai écrit un script et un package Homebrew pour cela. Super facile à installer, vous pouvez le trouver sur GitHub PotatoLabs/git-redate page.

Syntaxe:

git redate -c 3

Vous avez juste à courir git redate et vous serez en mesure de modifier toutes les dates dans vim des 5 plus récents commits (il y a aussi un -c option pour combien de commits vous voulez revenir, il vaut par défaut 5). Faites-moi savoir si vous avez des questions, des commentaires ou des suggestions!

enter image description here


64
2017-10-17 20:24



Chaque validation est associée à deux dates, la date de l'auteur et la date de l'auteur. Vous pouvez voir ces dates avec:

git log --format=fuller

Si vous voulez changer la date de l'auteur et la date de committer des 6 derniers commits, vous pouvez simplement utiliser une rebase interactive:

git rebase -i HEAD~6

.

pick c95a4b7 Modification 1
pick 1bc0b44 Modification 2
pick de19ad3 Modification 3
pick c110e7e Modification 4
pick 342256c Modification 5
pick 5108205 Modification 6

# Rebase eadedca..5108205 onto eadedca (6 commands)
#
# Commands:
# p, pick = use commit
# r, reword = use commit, but edit the commit message
# e, edit = use commit, but stop for amending
# s, squash = use commit, but meld into previous commit
# f, fixup = like "squash", but discard this commit's log message
# x, exec = run command (the rest of the line) using shell
# d, drop = remove commit

Pour tous les commits où vous voulez changer la date, remplacez pick par edit (ou juste e), puis enregistrez et quittez votre éditeur.

Vous pouvez maintenant modifier chaque validation en spécifiant la date de l'auteur et la date de l'auteur au format ISO-8601:

GIT_COMMITTER_DATE="2017-10-08T09:51:07" git commit --amend --date="2017-10-08T09:51:07"

La première date est la date de validation, la seconde est la date de l'auteur.

Ensuite, passez au commit suivant avec:

git rebase --continue

Répétez le processus jusqu'à ce que vous modifiez tous vos commits. Vérifiez votre progression avec git status.


57
2018-02-02 08:50



Bâtir sur theosporde répondre, J'ai écrit un script appelé git-cdc (pour changer la date de validation) que j'ai mis dans mon PATH.

Le nom est important: git-xxx partout dans votre PATH vous permet de taper:

git xxx
# here
git cdc ... 

Ce script est en bash, même sur Windows (puisque Git l'appellera de son environnement msys)

#!/bin/bash
# commit
# date YYYY-mm-dd HH:MM:SS

commit="$1" datecal="$2"
temp_branch="temp-rebasing-branch"
current_branch="$(git rev-parse --abbrev-ref HEAD)"

date_timestamp=$(date -d "$datecal" +%s)
date_r=$(date -R -d "$datecal")

if [[ -z "$commit" ]]; then
    exit 0
fi

git checkout -b "$temp_branch" "$commit"
GIT_COMMITTER_DATE="$date_timestamp" GIT_AUTHOR_DATE="$date_timestamp" git commit --amend --no-edit --date "$date_r"
git checkout "$current_branch"
git rebase  --autostash --committer-date-is-author-date "$commit" --onto "$temp_branch"
git branch -d "$temp_branch"

Avec cela, vous pouvez taper:

git cdc @~ "2014-07-04 20:32:45"

Cela réinitialiserait l'auteur / la date de validation du commit avant HEAD (@~) à la date spécifiée.

git cdc @~ "2 days ago"

Cela réinitialiserait l'auteur / la date de validation du commit avant HEAD (@~) à la même heure, mais il y a 2 jours.


Ilya Semenov mentions dans les commentaires:

Pour OS X, vous pouvez également installer GNU coreutils (brew install coreutils), ajoutez-le à PATH (PATH="/usr/local/opt/coreutils/libexec/gnubin:$PATH") puis utilisez "2 days ago"syntaxe.


40
2017-07-05 09:29



Cela modifie la date (horodatage) pour le dernier commit

git commit --amend --date "Thu May 28 18:21:46 2015 +0530"


25
2018-06-02 13:04



si c'est le dernier commit précédent.

git rebase  -i HEAD~2
git commit --amend --date=now

si vous appuyez déjà sur orgin et que vous pouvez forcer l'utilisation:

git push --force 

Si vous ne pouvez pas forcer la poussée et si elle est poussée, vous ne pouvez pas changer la validation! .


17
2018-04-25 00:34