是否可以将提交日期从提交更改为作者日期?
我修改了一些提交,现在日期都是一样的。我想将其设置回旧日期(或作者日期)。这可能吗?
我正在使用Sourcetree所以我有git命令行,但我不是那个专业人士。我的外部存储库是bitbucket。
答案 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