删除所有git提交的时间和时区,但保留日期

时间:2018-07-17 18:21:27

标签: git git-commit

我想删除在存储库中创建的所有提交的时间,尤其是时区信息。那可能吗?如果不是,是否可以将时间简单地设置为00:00并将时区设置为+0000? (我想保持日期顺时针。这只是我不想要的时间和时区。) 我只发现了有关更改所有提交的作者的问题,但仅更改所有提交中保留剩余信息的属性的问题就没有。 是的,我知道人们还有其他方法可以找到我的住处等,但这对我来说已经足够了。

3 个答案:

答案 0 :(得分:3)

您不能“不存储时间”,但始终可以将时间设置为00:00,将TZ设置为+0000。

对于新提交,最直接的方法是设置GIT_COMMITTER_DATEGIT_AUTHOR_DATE环境变量。例如,在bash命令行上,您可以说

export GIT_COMMITTER_DATE="$(date +%Y-%m-%d) 00:00:00+0000"
export GIT_AUTHOR_DATE="$(date +%Y-%m-%d) 00:00:00+0000"

您需要确保在每天的第一次提交之前执行此操作;也许通过将其添加到您的登录脚本之类的方式中。

您的措辞表明您可能也有提交历史。这些也可以更改,例如通过将git filter-branchenv-filter选项一起使用。有关其工作原理的详细信息,请参见https://git-scm.com/docs/git-filter-branchfilter-branch文档。

但是,重要的是要了解这是一个历史重写,即您将用新的提交替换所有现有的提交,并且如果其他任何人共享此存储库,则会使它们处于损坏状态,需要进行恢复。 (请参阅git rebase文档中的“从上游rebase恢复”以了解将涉及的内容。)确实无法解决这一问题-提交和作者日期是每个提交的组成部分。

答案 1 :(得分:3)

警告:编辑提交的任何信息都会更改其哈希值,并且 因此,所有后代提交的哈希都可能导致 "rewriting" history,如果其他人已经在其中获取了提交 问题。


如前所述,git filter-branch可用于重写许多提交。 一次。

仅编辑时间戳可以通过其完成 environment filter

  

如果仅需要修改以下环境,则可以使用此过滤器:   提交将被执行。具体来说,您可能要重写   作者/提交者名称/电子邮件/时间环境变量(请参阅   git-commit-tree了解详情)。

具体来说,可以设置GIT_AUTHOR_DATEGIT_COMMITTER_DATE git internal date format中具有值的环境变量:

  

它是 <时区偏移>,其中是自UNIX时代以来的秒数。 <时区   offset>是UTC的正或负偏移量。例如CET(其中   比UTC早1小时)是+0100。

警告:以下代码示例可一次重写整个树。

只需在{strong>环境过滤器中changed directly

  

我想删除所有的时间,尤其是时区信息   在存储库中创建的提交。

要仅删除时区信息,可以只设置日期 $timestamp +0000的变量:

git filter-branch --env-filter '
  GIT_AUTHOR_DATE="$(git show -q --format="%at" "$GIT_COMMIT") +0000"
  GIT_COMMITTER_DATE="$(git show -q --format="%ct" "$GIT_COMMIT") +0000"
  ' -- --all
  

(我想保持日期为顺时针。这只是我不想要的时间和时区   想要。

删除 时间时区,这比较棘手 (使用ISO 8601 format):

git filter-branch --env-filter '
  author_ts="$(git show -q --format="%at" "$GIT_COMMIT")"
  committer_ts="$(git show -q --format="%ct" "$GIT_COMMIT")"
  GIT_AUTHOR_DATE="$(date -d "@$author_ts" +"%Y-%m-%dT00:00:00 +0000")"
  GIT_COMMITTER_DATE="$(date -d "@$committer_ts" +"%Y-%m-%dT00:00:00 +0000")"
  ' -- --all

注意:时区信息未显示在format example中, 因此将来可能会中断。所以也可以use the TZ 环境变量来设置时区,但我不确定它的可移植性:

TZ=UTC git filter-branch --env-filter '
  author_ts="$(git show -q --format="%at" "$GIT_COMMIT")"
  committer_ts="$(git show -q --format="%ct" "$GIT_COMMIT")"
  GIT_AUTHOR_DATE="$(date -d "@$author_ts" +"%Y-%m-%dT00:00:00")"
  GIT_COMMITTER_DATE="$(date -d "@$committer_ts" +"%Y-%m-%dT00:00:00")"
  ' -- --all

答案 2 :(得分:0)

我从不需要使用它,但是这里有人创建了一个插件来管理这种情况。您可以在此处访问代码:https://github.com/bitriddler/git-change-date