web-dev-qa-db-fra.com

GIT: changer la date de validation en date de l'auteur

Est-il possible de changer la date de validation de ma validation à la date de l'auteur?

J'ai adapté quelques commits et maintenant les dates sont toujours les mêmes. Je veux le remettre aux anciennes dates (ou aux dates de l'auteur). Est-ce possible?

J'utilise Sourcetree donc j'ai la ligne de commande git mais je ne suis pas un pro dans ce domaine. Mon référentiel externe est bitbucket.

42
kevingoos

Depuis git 1.6.3 git rebase A --committer-date-is-author-date À cet effet.

git rebase --committer-date-is-author-date

Réponse originale:
Il n'y a pas de moyen facile de définir les dates de committer (modifier: mais voir "modifier 2" ci-dessous). Les dates de l'auteur sont faciles à ajuster (au moment de la validation) car --date Vous permettra de spécifier chacune au fur et à mesure.

La variable d'environnement GIT_COMMITTER_DATE Peut être utilisée pour forcer un horodatage différent au moment où vous effectuez la validation. Notez cependant que vous devrez ajuster cela pour chaque commit que vous "rejouez". Le nouveau commit résultant aura un SHA-1 différent (parce que vous y avez modifié quelques bits, à savoir le champ date du committer), ce qui signifie que vous devez refaire tous ses commits descendants.

C'est ce que fait git filter-branch (Recréez certains, plusieurs ou tous les commits avec les modifications apportées en cours de route, en conservant un mappage des anciens ID SHA-1 aux nouveaux ID SHA-1 et en ajustant les parents des événements même). sinon, des copies de validation intactes afin que le "nouveau" DAG des nouveaux ID SHA-1 corresponde à l '"ancien" DAG de toutes les manières possibles, c'est-à-dire de toutes les manières, à l'exception des ID SHA-1 et de toute autre modification apportée par votre filtre (s )).

En d'autres termes, pour ce faire, vous devez utiliser git filter-branch Pour réécrire l'historique, avec tout ce que cela implique. [Modifier: vous pouvez littéralement le faire sans git filter-branch, Par exemple en le faisant dans git rebase -i À la place, mais l'effet est le même.]

Edit 2: comme indiqué dans un commentaire (depuis supprimé), git rebase A --committer-date-is-author-date À cet effet. Il fait toujours la même réécriture de l'historique, mais c'est beaucoup plus pratique que de le faire avec la commande brute git filter-branch.

38
torek

Réponse courte:

git filter-branch --env-filter 'export GIT_COMMITTER_DATE="$GIT_AUTHOR_DATE"'

Explication:

filter-branch vous permet de réécrire votre historique git. Il peut appliquer des transformations à chaque validation ou filtrer les validations en fonction de certains critères. Voir git filter-branch --help pour une description complète et des instructions d'utilisation.

--env-filter vous permet de définir les variables d'environnement présentes lors de la création du nouvel historique. Il est évalué pour chaque commit séparément.

57
jsphpl