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)
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
命令更方便.
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
.
我想借鉴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)