Les réponses à Comment modifier les validations existantes et non poussées? décrire un moyen de modifier les messages de validation précédents qui n'ont pas encore été poussés en amont. Les nouveaux messages héritent des horodatages des validations d'origine. Cela semble logique, mais existe-t-il un moyen de réinitialiser également les temps?
git
timestamp
commit
git-rewrite-history
Dhskjlkakdh
la source
la source
git commit --amend --reset-author
Réponses:
À utiliser
git filter-branch
avec un filtre env qui définitGIT_AUTHOR_DATE
etGIT_COMMITTER_DATE
pour le hachage spécifique de la validation que vous cherchez à corriger.Cela invalidera cela et tous les hachages futurs.
Exemple:
Si vous souhaitez modifier les dates de validation
119f9ecf58069b265ab22f1f97d2b648faf932e0
, vous pouvez le faire avec quelque chose comme ceci:la source
Vous pouvez effectuer un rebase interactif et choisir de modifier le commit dont vous souhaitez modifier la date. Lorsque le processus de rebase s'arrête pour modifier la validation que vous tapez par exemple:
Ensuite, vous continuez votre rebase interactif.
UPDATE (en réponse au commentaire de studgeek): pour changer la date de commit au lieu de la date de l'auteur:
Les lignes ci-dessus définissent une variable d'environnement GIT_COMMITTER_DATE qui est utilisée pour modifier la validation.
Tout est testé dans Git Bash.
la source
rebase
, vous pouvez simplement faire legit commit --amend
+ var fixedDate = strftime(new Date(), "%c"); + var result = shelljs.exec("git commit --amend --date=\"" + fixedDate + "\" --no-edit");
Une meilleure façon de gérer toutes ces suggestions dans une seule commande est
Cela définira la date de validation et d'auteur du dernier commit sur "dès maintenant".
la source
LANG= GIT_COMMITTER_DATE="`date`" git commit --amend --date "`date`"
--date "now"
. Git> = 2 interprétera cela.Faites-le
git commit --amend --reset-author --no-edit
. Pouredit
les validations plus anciennes, vous pouvez effectuer une rebase interactive et choisir la validation dont vous souhaitez modifier la date.Modifiez ensuite le commit avec
--reset-author
et--no-edit
pour remplacer la date de l'auteur par la date actuelle:Enfin, poursuivez votre rebase interactif:
la source
--reset-author
, c'est nouveau dans git 1.6.6 (ref gitlog.wordpress.com/2010/01/13/git-1-6-6 )--reset-author
réinitialise à la fois l'auteur et la date de l'auteur.J'ai écrit un script et un package Homebrew pour cela. Super facile à installer, vous pouvez le trouver sur la
PotatoLabs/git-redate
page GitHub .Syntaxe:
Il vous suffit d'exécuter
git redate
et vous pourrez modifier toutes les dates dans vim des 5 derniers commits (il y a aussi une-c
option pour le nombre de commits que vous souhaitez revenir en arrière, il est juste 5 par défaut). Faites-moi savoir si vous avez des questions, des commentaires ou des suggestions!la source
Chaque commit est associé à deux dates, la date du commiteur et la date de l'auteur. Vous pouvez consulter ces dates avec:
Si vous souhaitez modifier la date d'auteur et la date de validation des 6 derniers validations, vous pouvez simplement utiliser un rebase interactif:
.
Pour toutes les validations où vous souhaitez modifier la date, remplacez
pick
paredit
(ou tout simplemente
), puis enregistrez et quittez votre éditeur.Vous pouvez maintenant modifier chaque commit en spécifiant la date de l'auteur et la date du commit au format ISO-8601:
La première date est la date de validation, la seconde est la date de l'auteur.
Passez ensuite au commit suivant avec:
Répétez le processus jusqu'à ce que vous modifiiez tous vos commits. Vérifiez votre progression avec
git status
.la source
git checkout name-of-current-branch
.--no-edit
ingit commit --amend --no-edit --date=2017-10-08T09:51:07
pour conserver l'ancien message de validation.GIT_COMMITTER_DATE
comme décrit ici eddmann.com/posts/…la source
Sur la base de la réponse de theosp , j'ai écrit un script appelé
git-cdc
(pour changer la date de validation) que j'ai mis dans monPATH
.Le nom est important:
git-xxx
n'importe où dans votrePATH
clavier vous permet de taper:Ce script est en bash, même sous Windows (puisque Git l'appellera depuis son environnement msys )
Avec cela, vous pouvez taper:
Cela réinitialiserait la date auteur / validation du commit avant HEAD (
@~
) à la date spécifiée.Cela réinitialiserait la date auteur / validation de la validation avant HEAD (
@~
) à la même heure, mais il y a 2 jours.Ilya Semenov mentionne dans les commentaires :
la source
git cdc @~ "2014-07-04 20:32:45
sinon, il ne reconnaîtrait pas l'heure et donc obtiendrait l'heure 00:00:00 (cela devient le troisième argument).brew install coreutils
), l'ajouter à PATH (PATH="/usr/local/opt/coreutils/libexec/gnubin:$PATH"
) puis utiliser la syntaxe "il y a 2 jours".2 days ago
" fonctionne-t-il?Comment modifier plusieurs dates de validation
Les autres réponses ne sont pas très pratiques pour modifier plusieurs dates de validation. Je suis revenu sur cette question après quelques années pour partager une technique.
Pour modifier les dates des 4 derniers commits:
Modifiez le rebase comme suit, en insérant des
exec
lignes pour modifier les dates au besoin:la source
--amend
/--date
. Plus simple que ma propre réponse en utilisant des variables d'environnement. A voté.GIT_AUTHOR_DATE
uniquement.exec git commit --amend --no-edit --date "now"
s'il s'agit du dernier commit précédent.
si vous poussez déjà en orgin et pouvez forcer l'utilisation:
si vous ne pouvez pas forcer la poussée et si elle est poussée, vous ne pouvez pas changer le commit! .
la source
Voici un alias pratique qui change les heures de validation et de création de la dernière validation en une heure acceptée par
date --date
:Usage:
git cd <date_arg>
Exemples:
Edit: Voici une version plus automatisée qui vérifie que l'index est propre (pas de modifications non validées) et réutilise le dernier message de validation, ou échoue dans le cas contraire (infaillible):
la source
J'ai créé ce package npm pour changer la date des anciens commits.
https://github.com/bitriddler/git-change-date
Exemple d'utilisation:
Vous serez invité à choisir le commit que vous souhaitez modifier puis à saisir la nouvelle date.
Si vous souhaitez modifier une validation par hachage spécifique, exécutez cette
git-change-date --hash=[hash]
la source
La fonction bash suivante changera l'heure de tout commit sur la branche courante.
Attention à ne pas l'utiliser si vous avez déjà poussé le commit ou si vous utilisez le commit dans une autre branche.
la source
if [[ -z "$commit" ]]
->if [[ -z "$date_timestamp" ]]
GIT_COMMITTER_DATE=
à la fin de la méthode pour empêcher toute autre validation manuelle de conserver la date spécifiée.Pour modifier à la fois la date de l'auteur et la date de validation:
la source
Si vous souhaitez obtenir la date exacte d'un autre commit (supposons que vous rebasiez un commit modifié et que vous vouliez qu'il ait la date de la version originale de pré-rebase):
Cela corrige la date de la validation HEAD pour être exactement la date de la validation a383243 (inclure plus de chiffres s'il y a des ambiguïtés). Il fera également apparaître une fenêtre d'éditeur afin que vous puissiez modifier le message de validation.
C'est pour la date de l'auteur, ce qui vous intéresse généralement - voir les autres réponses pour la date du committer.
la source
Si vous souhaitez effectuer la réponse acceptée ( https://stackoverflow.com/a/454750/72809 ) dans la ligne de commande Windows standard, vous avez besoin de la commande suivante:
Remarques:
^
), mais je n'ai pas réussi.Merci beaucoup à un article de blog de Colin Svingen . Même si son code ne fonctionnait pas pour moi, il m'a aidé à trouver la bonne solution.
la source
Si le commit n'est pas encore poussé, je peux utiliser quelque chose comme ça:
après que git bash ouvre l'éditeur avec la date déjà appliquée, il vous suffit de l'enregistrer en tapant dans le mode de commande de l'éditeur de VI ": wq" et vous pouvez le pousser
la source
--no-edit
option.git push -f
(mise à jour forcée). Cela peut cependant avoir des effets secondaires. (surtout si beaucoup de gens ont des clones locaux du référentiel)Pour ceux qui utilisent Powershell
Crédit à https://mnaoumov.wordpress.com/2012/09/23/git-change-date-of-commit/
la source
Il y a déjà beaucoup de bonnes réponses, mais quand je veux changer la date de plusieurs validations en une journée ou en un mois, je ne trouve pas de bonne réponse. Je crée donc un nouveau script pour cela avec explication, j'espère que cela aidera quelqu'un:
La date sera modifiée:
la source