在重新定位git分支时更改时间戳

tar*_*ius 83 git git-rebase

我已经重新组织了一个分支中的提交,然后它将被公开,导致提交的时间戳处于混合顺序.我宁愿让他们今天只有几秒钟.

显然,这些时间戳也不正确,但由于这是事情上市的时候,我更喜欢在时间上混淆历史.

那么如何告诉git在重新定位时创建新的时间戳?

Mic*_*ker 114

git rebase --ignore-date
Run Code Online (Sandbox Code Playgroud)

  • @Tim根提交没有父提交,当我问这个问题时,我也想改变提交的日期.现在我们有`--root`,这使得这成为可能. (4认同)
  • “与--interactive选项不兼容。” [请参阅文档](https://git-scm.com/docs/git-rebase#git-rebase---ignore-date) (3认同)
  • 我在发布之前尝试过它.除了我没有以交互方式完成它,也许这就是诀窍?另外,您是否尝试过--committer-date-is-author-date别名?也许在以后的版本中引入了--ignore-date,我不知道. (2认同)
  • 是的,如果以非交互方式完成,则可行.但随后 - 与rebase一样 - 第一次提交不受影响. (2认同)
  • @ MichaelKrelin-hacker:根据文档,_-- ignore-date这些标志传递给git am,以轻松更改重新基于基础的提交的日期(请参阅git-am [1])。与--interactive选项不兼容。_ (2认同)

lkr*_*aav 26

在我的情况下,将时间戳更改为CommitDate值,因此在gitweb中,一堆几个月的提交显示为4天之久.我找到了最后一次提交正确的日期,并做了:

$ git rebase --committer-date-is-author-date SHA
Run Code Online (Sandbox Code Playgroud)

  • 不,这不对.事实上,恰恰相反.来自[`git rebase`](https://git-scm.com/docs/git-rebase)的文档:"_这些标志传递给`git am`以轻松更改已重新设置的commits_的日期".在[`git am`](https://git-scm.com/docs/git-am)中,它说:`--committer-date-is-author-date`"_ [...]允许用户通过使用与作者date_"相同的值来说谎提交者日期,而`--ignore-date`"_ [...]允许用户使用与提交者date_相同的值来欺骗作者日期. (39认同)

Uma*_*har 19

有以下几种方式

  1. 正常变基

    git rebase --ignore-date
    
    Run Code Online (Sandbox Code Playgroud)
  2. 交互式变基

    git rebase -i master
    git commit --amend --date=now
    git push origin <branch> -f
    
    Run Code Online (Sandbox Code Playgroud)


Von*_*onC 7

来自评论:

不兼容 --interactive option

实际上……它不再与 Git 2.29(2020 年第 4 季度)不兼容:“ git rebase -i男人 学习了更多选项
兼容的选项:

  • --interactive/-i
  • --root

请参阅Junio C Hamano () 的commit 6160b2e(2020 年 8 月 26 日。 见提交2712669(2020年8月17日),并提交ef484ad由(2020年7月13日)罗希特夏尔Ashiwal( ) 参见Phillip Wood ( ) 的commit a3894aacommit 7573ceccommit e8cbe21 (17 Aug 2020 )(由Junio C Hamano合并-- --提交 9c31b19 中,2020 年 9 月 3 日)gitster
r1walz
phillipwood
gitster

rebase -i: 支持 --ignore-date

原创补丁:Rohit Ashiwal
签名:Phillip Wood

Rebase 由两个不同的后端实现 - ' apply' 和 ' merge',每个后端都支持不同的选项集。

特别是 apply 后端支持许多由 ' ( man ) '实现的选项,这些选项在合并后端中没有实现。 这意味着可用选项因使用的后端而异,这令人困惑。git am

此补丁增加--ignore-date了对合并后端选项的支持。

此选项使用当前时间作为作者日期,而不是在重写提交时重复使用原始作者日期。
我们要小心处理的组合--ignore-date,并--committer-date-is-author-date以同样的方式作为后端应用。

和:

rebase: 添加 --reset-author-date

帮助者:Junio C Hamano
签字人:Rohit Ashiwal

之前的提交将--ignore-date标志引入到rebase -i,但名称相当模糊,因为它没有说明是否忽略作者日期或提交者日期。
添加别名以传达准确的目的。

--reset-author-date

还:

rebase -i: 支持 --committer-date-is-author-date

原创补丁:Rohit Ashiwal
签名:Phillip Wood

此补丁增加--committer-date-is-author-date了对合并后端选项的支持。
此选项使用正在被重写的提交的作者日期作为创建新提交时的提交者日期。

git rebase现在包括在其手册页中

--committer-date-is-author-date

不要使用当前时间作为提交者日期,而是使用被重新定位的提交的作者日期作为提交者日期。
此选项意味着--force-rebase.

git rebase还包括在其手册页中

--ignore-date:

此标志传递给 'git am' 以更改每个重新提交的作者日期(请参阅 参考资料git am)。


请注意,在 2.29(以上)中,“ --committer-date-is-author-daterebase和“ am”子命令的“

请参阅Jeff King ( ) 的commit 5f35eddcommit 16b0bb9commit 56706db(2020 年 10 月 23 日(由Junio C Hamano合并-- --提交 f34687d 中,2020 年 10 月 26 日)peff
gitster

am:修复损坏的电子邮件 --committer-date-is-author-date

签字人:Jeff King

Commit e8cbe2118a ( am: stop exporting GIT_COMMITTER_DATE,2020-08-17) 重写了用于设置 committer date to use 的代码fmt_ident(),而不是设置环境变量并让commit_tree()处理它。
但它引入了两个错误:

  • 我们使用作者电子邮件字符串而不是提交者电子邮件
  • 在解析提交者身份时,我们使用了错误的变量来计算电子邮件的长度,导致它始终是一个零长度的字符串

此提交修复了两者,这导致我们通过 rebase " apply" 后端对此选项的测试现在成功。

和:

rebase: 使用 --committer-date-is-author-date 修复损坏的电子邮件

报告人:VenomVendor
签字人:Jeff King

提交7573cec52c ("rebase -i: support --committer-date-is-author-date", 2020-08-17, Git v2.29.0-rc0 -- merge列在第 #13 批中) 复制了提交者身份解析代码从builtin/am.c.
这样做时,它复制了一个错误,在该错误中我们总是将电子邮件设置为空字符串。

我们git-am在之前的提交中修复了版本;此提交修复了复制的代码。