4

前几天我分支了我的 github 项目以创建静态页面,但搞砸了我的作者姓名

https://github.com/ronaldsuwandi/le-simplepage/commits/gh-pages

如何为分支的第一次提交重命名作者?

我试过了

但没有运气 - 我对 git 还是很陌生..

编辑:如果我想更改第一次提交, Amber给出的答案不起作用(例如,如果我的提交历史是A-B-C-D并且我想更改BI can do的提交历史git rebase -i A。但我不确定如果我该怎么做想改变自己的提交历史A

4

3 回答 3

8
git checkout gh-pages
git reset --hard 02bd
git commit --amend --author 'Ronald Suwandi <ronald@ronaldsuwandi.com>'
git cherry-pick 02bd..origin/gh-pages
git push -f
于 2013-04-15T03:06:21.057 回答
2

就像在现实生活中一样,改变历史并不是一件小事。;)

在 git 中,提交包括(除其他外)作者姓名和父提交。因此,您不能简单地更改提交作者等属性。您唯一能做的就是丢弃旧的提交并创建一个新的固定提交。但是由于下一个提交确实包含作为父级的原始提交,因此您也必须更改该提交。- 但是你不能这样做,但你需要更换旧的,等等。

可以git rebase帮助您解决这种丑陋的事情:它需要一系列提交并创建一个具有更改历史的全新提交。由于 git 中的分支只是指向单个提交的指针,因此变基只是将该指针从旧历史记录更改为新历史记录。

X-A-B-C-D <- "old master"
 `a-b-c-d <- "new master"

只要您在本地存储库上工作,就可以随意更改历史记录。一旦您通过将提交推送到 github 之类的共享存储库来发布提交,事情就会发生变化。如果您已经发布了旧的历史记录,现在又发布了新的历史记录,那么这两个版本都已发布,并且如果其他人也在该存储库上工作,那么旧版本很可能会回到您的历史记录中。

因此,一旦您发布了历史,通常就不要更改它。但是,如果您确定没有其他人在您的远程存储库上工作,您无论如何都可以这样做:在本地修复您的历史记录并强制将其推送到存储库。

在本地更改历史记录很容易git rebase -i。不幸的是,对于您的存储库的根提交来说,这有点棘手。请参阅使用 Git 更改项目的首次提交?详情。

于 2013-04-15T03:03:51.513 回答
2

Git Tower 有一个非常有用的页面,详细介绍了更改作者的几种不同方法

您可以在命令行上使用以下脚本来修复 repo 中不正确的作者姓名。

$ git filter-branch --env-filter '
WRONG_EMAIL="wrong@example.com"
NEW_NAME="New Name Value"
NEW_EMAIL="correct@example.com"
if [ "$GIT_COMMITTER_EMAIL" = "$WRONG_EMAIL" ]
then
    export GIT_COMMITTER_NAME="$NEW_NAME"
    export GIT_COMMITTER_EMAIL="$NEW_EMAIL"
fi
if [ "$GIT_AUTHOR_EMAIL" = "$WRONG_EMAIL" ]
then
    export GIT_AUTHOR_NAME="$NEW_NAME"
    export GIT_AUTHOR_EMAIL="$NEW_EMAIL"
fi
' --tag-name-filter cat -- --branches --tags

https://www.git-tower.com/learn/git/faq/change-author-name-email

于 2017-12-02T11:07:13.283 回答