来自HEAD的Git过滤器分支

时间:2015-05-24 01:28:47

标签: git

我最近分叉,提交并向公共存储库发出拉取请求,我不是合作者。我的拉取请求尚未合并。

通过我的提交,我意识到我使用了错误的作者名称并且我想要修复它。我尝试做一个很好的改造:

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标志吗?那是做什么的?

2 个答案:

答案 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}}。

即使您已经重写了当地的历史记录,这仍然有用,但我还没有尝试过。

关于rebase命令:

以下是一般表格:

--committer-date-is-author-date

如果-i是来自--interactive的分支,则会在$ git rebase --onto NEW_BASE OLD_BASE SOME_BRANCH SOME_BRANCH之间进行所有提交,并将其应用于OLD_BASE而不是OLD_BASE

这是一个更具体的命令,基于您提供的少数参考:

SOME_BRANCH