GIT:将提交日期更改为作者日期

kev*_*oos 42 git date bitbucket atlassian-sourcetree

是否可以将提交日期从我的提交更改为作者日期?

我修改了一些提交,现在日期都是一样的.我想将其设置回旧日期(或作者日期).这可能吗?

我正在使用Sourcetree所以我有git命令行,但我不是那个专业人士.我的外部存储库是bitbucket.

jsp*_*hpl 60

git filter-branch --env-filter 'export GIT_COMMITTER_DATE="$GIT_AUTHOR_DATE"'
Run Code Online (Sandbox Code Playgroud)

  • 这应该是公认的答案.不过,@ torek的答案很有用. (6认同)
  • 一点点解释会很棒. (4认同)
  • 我们还可以在“git filter-branch -f --env-filter '...' 338f1ac1..HEAD”末尾定义提交范围。 (3认同)

tor*_*rek 39

由于git 1.6.3 git rebase就是--committer-date-is-author-date为了这个目的.

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

原始答案:
没有简单的方法来设置提交者日期(编辑:但请参阅下面的"编辑2").在笔者的日期是容易调整(在提交时),因为--date会让你逐一指定,当您去.

环境变量GIT_COMMITTER_DATE可用于在您提交时强制使用不同的时间戳.但请注意,您需要为每次"重播"提交调整此项.生成的新提交将具有不同的SHA-1(因为您已更改其中的一些位,即提交者日期字段),这意味着您必须重做其所有后代提交.

这是做什么的git filter-branch(重新创建一些,许多或所有提交,一路上进行更改,保持从旧的SHA-1 ID到新的SHA-1 ID的映射,并调整偶数 - 未经修改的提交副本的父项,以便新SHA-1 ID的"新"DAG以各种可能的方式匹配"旧"DAG,即除了SHA-1 ID和过滤器所做的任何其他更改之外的所有方式).

换句话说,要做到这一点,你必须使用git filter-branch重写历史,这意味着所有这一切.[编辑:你可以在没有git filter-branch例如git rebase -i相反的情况下完成它,但效果是相同的.]

编辑2:正如eis在评论中指出的那样(自从删除),git rebase就是--committer-date-is-author-date出于此目的.它仍然执行相同的历史重写,但它比使用raw git filter-branch命令更方便.

  • 请注意,我们可以使用例如“git rebase --committer-date-is-author-date HEAD~3”来仅将其应用于最近的三个提交。 (6认同)
  • 不幸的是,当--committer-date-is-author-date与`--root`结合使用时,它似乎已经被破坏了。 (2认同)

Ami*_*adi 8

单行filter-repo

您还可以像这样使用filter-repo(推荐的替代品):filter-branch

git filter-repo --commit-callback 'commit.committer_date = commit.author_date'
Run Code Online (Sandbox Code Playgroud)

这比filter-branch.


Dav*_*Mar 5

我想借鉴jsphpl 的答案,因为我正在寻找一种方法来做到这一点,但有两个区别:

  • 我只想更改当前分支中的提交
  • 我希望签署重写的提交

首先,您需要分支中第一次提交的 ID:

git log master..your-branch-name --pretty="%H" | tail -1
Run Code Online (Sandbox Code Playgroud)

其输出将如下所示:c04b195ca1ed4c8a18c6a98d67b8a764a3006afc

获取该 ID 并将其插入以下命令中:

git filter-branch -f \
--env-filter 'export GIT_COMMITTER_DATE="$GIT_AUTHOR_DATE"' \
--commit-filter 'git commit-tree -S "$@";' \
c04b195ca1ed4c8a18c6a98d67b8a764a3006afc^...your-branch-name
Run Code Online (Sandbox Code Playgroud)

每次提交的提交日期和作者日期现在应该匹配。您可以通过运行以下命令进行仔细检查,以轻松查看和比较提交日期值:

git log --format="%H %cI %aI %s" master...your-branch-name
Run Code Online (Sandbox Code Playgroud)