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

时间:2015-02-16 08:07:35

标签: git date bitbucket atlassian-sourcetree

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

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

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

3 个答案:

答案 0 :(得分:51)

简答:

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

说明:

filter-branch可让您重写git历史记录。它可以根据特定条件对每个提交应用转换或过滤提交。有关详细说明和使用说明,请参阅git filter-branch --help

--env-filter允许您设置在创建新历史记录期间存在的环境变量。它将分别针对每个提交进行评估。

答案 1 :(得分:36)

由于git 1.6.3 git rebase为此目的而拥有--committer-date-is-author-date

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

原始答案:
没有简单的方法来设置提交者日期(编辑:但请参阅"编辑2"下面)。 author 日期很容易调整(在提交时),因为--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 :正如在评论中注明的那样(自已删除),git rebase为此目的有--committer-date-is-author-date。它仍然执行相同的历史重写,但它比使用原始git filter-branch命令更方便。

答案 2 :(得分:1)

我想背负answer from jsphpl,因为我一直在寻找一种做到这一点的方法,但有两个区别:

  • 我只想更改当前分支中的提交
  • 我希望对重写的提交进行签名

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

git log master..your-branch-name --pretty="%H" | tail -1

该命令的输出如下所示: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

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

git log --format="%H %cI %aI %s" master...your-branch-name