【发布时间】:2012-10-13 16:09:20
【问题描述】:
无论如何我可以通过从所有日期中减去(比如说一周)来更改 GIT 中的所有提交日期。
喜欢,而不是显示 “在 2012 年 9 月 10 日星期四,用户承诺......” 我想说 “在 2012 年 9 月 3 日星期一,用户承诺...”
这仅适用于一个 GIT 存储库。 谢谢!
【问题讨论】:
-
你为什么要这样做;改写历史说你做的比你做的更早是我想到的唯一原因。
标签: git
无论如何我可以通过从所有日期中减去(比如说一周)来更改 GIT 中的所有提交日期。
喜欢,而不是显示 “在 2012 年 9 月 10 日星期四,用户承诺......” 我想说 “在 2012 年 9 月 3 日星期一,用户承诺...”
这仅适用于一个 GIT 存储库。 谢谢!
【问题讨论】:
标签: git
是的,您可以使用 git filter-branch 执行此操作。但是请注意,这也会影响所有哈希,所有提交都将被重新创建,并且 repo 历史记录将被重写。所以,这可能很危险。
您需要将 git filter-branch 与设置 GIT_AUTHOR_DATE 和 GIT_COMMITTER_DATE 变量的环境过滤器一起使用。在 github 中有 example script to change author info for all commits - 它是类似的东西,你只需要使用我提到的变量,并实现一个基于给定日期决定一周前日期的逻辑。
最后警告:如果有人已经使用过该回购协议,事情可能会变得一团糟。来自github页面:
此操作会破坏您的存储库的历史记录。最好这样做 这在一个克隆上,以防万一。另请注意,这不应该是 在已与他人共享的 repo 上执行。自己使用 风险。
【讨论】:
大多数示例都基于 shell 脚本(例如 eis 答案),如果您进行日期算术,IMO 可能会变得复杂(例如,查看 Date arithmetic in Unix shell scripts)。
我通过将git filter-branch 与schacon's ruby-git gem 结合起来找到了一个更易读的解决方案(这很棒,但AFAIK 缺乏重写功能)。 Ruby 用于循环遍历 git 历史并应用日期/时间算法,使用 ActiveSupport 非常好,例如actual + 6.months
【讨论】: