我最近分叉,提交并向公共存储库发出拉取请求,我不是合作者。我的拉取请求尚未合并。
通过我的提交,我意识到我使用了错误的作者名称并且我想要修复它。我尝试做一个很好的改造:
git rebase -i HEAD~7
然后我edited
所有提交的提交,based on this answer,成功更改了提交的作者。
git commit --amend --author "James <email@example.com>" --no-edit && \
git rebase --continue
到目前为止一切都很好,但我注意到这会将提交时间更改为当前时间。我想保留以前的时间戳。 I tried following this answer,但filter-branch
似乎更改了整个存储库的哈希值。
我可能不应该强行推动这个。即使我这样做了,也可能会让我的拉动请求无法合并。所以,我试着在分支的最后几次提交中寻找运行filter-branch
的方法,但我找不到任何东西。我试过了:
git filter-branch --env-filter 'GIT_COMMITTER_DATE=$GIT_AUTHOR_DATE; export GIT_COMMITTER_DATE' HEAD~7
但这并不奏效。它退出并显示错误消息:
你想改写哪个参考?
我该怎么做?这可能吗?
我应该查看rebase的--committer-date-is-author-date
标志吗?那是做什么的?
答案 0 :(得分:2)
只需将您想要的修订范围传递给git filter-branch
,如下所示:
git filter-branch --env-filter 'GIT_COMMITTER_DATE=$GIT_AUTHOR_DATE; export GIT_COMMITTER_DATE' HEAD~7..HEAD
答案 1 :(得分:1)
我不担心。请注意,虽然提交日期更改,但保留作者日期。
如果你考虑一下,根据git的语义,这是有道理的:每当提交SHA改变时,它都是一个新的提交,并且提交日期也应该改变。
但是,以下内容应该有效:
a
以上命令将在const
上的$ git rebase --committer-date-is-author-date --onto origin/master master my-feature-branch
上进行所有提交,<{1}}中不,并在my-feature-branch
之上重新绑定它们。由于提供了master
,作者日期将复制到提交日期,但仅在您不使用 origin/master
或 {{时1}}。
即使您已经重写了当地的历史记录,这仍然有用,但我还没有尝试过。
以下是一般表格:
--committer-date-is-author-date
如果-i
是来自--interactive
的分支,则会在$ git rebase --onto NEW_BASE OLD_BASE SOME_BRANCH
和SOME_BRANCH
之间进行所有提交,并将其应用于OLD_BASE
而不是OLD_BASE
。
这是一个更具体的命令,基于您提供的少数参考:
SOME_BRANCH