我能否将提交日期更改为作者日期?
我修改了一些提交记录,现在它们的日期都相同。 我想将其设置回旧日期(或作者日期)。这可能吗?
我使用Sourcetree,所以我有git命令行,但我不是专家。我的外部存储库是bitbucket。
我能否将提交日期更改为作者日期?
我修改了一些提交记录,现在它们的日期都相同。 我想将其设置回旧日期(或作者日期)。这可能吗?
我使用Sourcetree,所以我有git命令行,但我不是专家。我的外部存储库是bitbucket。
git filter-branch --env-filter 'export GIT_COMMITTER_DATE="$GIT_AUTHOR_DATE"'
filter-branch
允许您重写 git 历史记录。它可以对每个提交应用转换或根据特定条件过滤提交。有关详细说明和用法说明,请参见 git filter-branch --help
。
--env-filter
允许您设置在创建新历史记录期间存在的环境变量。它会为每个提交单独进行评估。
committer-date=author-date
。 - aniongit filter-branch -f --env-filter '...' 338f1ac1..HEAD
。 - Orkhan AlikhanovHEAD^..HEAD
作为提交范围。另外,对于选项,有时可能需要添加-f/--force
(例如,您仍然拥有上次运行的备份)。 - ADTCgit rebase
命令支持使用 --committer-date-is-author-date
选项实现此功能。git rebase --committer-date-is-author-date
翻译:
设置committer日期没有简单的方法(编辑:但请参见下面的“编辑2”)。由于--date
可以让您在提交时指定每个作者,因此很容易调整author日期。
环境变量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 rebase -i
中完成此操作,例如通过使用--committer-date-is-author-date
选项,但效果是相同的,但会更加方便。]
编辑2:正如eis在评论中指出的那样(已被删除),git rebase
具有--committer-date-is-author-date
选项用于此目的。它仍然执行相同的历史记录重写,但比使用原始的git filter-branch
命令要方便得多。
--root
结合使用时,--committer-date-is-author-date
看起来相当有问题。 - user1338062git rebase --committer-date-is-author-date HEAD~3
的命令来仅将其应用于最近的三个提交记录。 - He Yifei 何一非HEAD~3
表示向后数三个第一父提交。 - torekrebase -i
的过程中放了一个break
,所以我不能用现有的rebase再做一次rebase。在这种独特的情况下,filter-branch
是唯一的方法。 - ADTCfilter-repo
的一行命令:您也可以像这样使用{{link1:filter-repo
}}(建议替代filter-branch
):
git filter-repo --commit-callback 'commit.committer_date = commit.author_date'
这比filter-branch
的性能要高得多。
git rebase
重新排列了提交记录的历史记录,则可能会发生这种情况。 - j6tgit filter-repo --commit-callback 'commit.committer_date = commit.author_date; commit.committer_name = commit.author_name; commit.committer_email = commit.author_email'
- undefined我希望借鉴 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