如何在git分支上更改作者姓名

时间:2013-04-15 01:52:00

标签: git branching-and-merging amend

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

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

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

我试过

但是没有运气 - 我仍然是git的新手..

编辑:Amber给出的答案如果我想更改第一次提交(例如,如果我的提交历史记录为A-B-C-D并且我想更改{{1}的提交历史记录,则无效我可以做B。但如果我想更改git rebase -i A本身的提交历史记录,我不知道该怎么办。

3 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:2)

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

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

git rebase来帮助你处理这类丑陋的事情:它需要一系列提交,并创建一个具有更改历史记录的全新提交。由于git中的分支只是指向单个提交的指针,因此rebase只是将指针从旧历史记录更改为新记录。

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

只要您正在使用本地存储库,就可以根据需要更改历史记录。一旦您通过将提交推送到像github这样的共享存储库来发布提交,事情就会发生变化。如果您已经发布了旧历史记录并且现在发布了新历史记录,则会发布这两个版本,如果其他版本也在该存储库上运行,那么旧版本可能会找到回溯到您的历史记录的好处。

因此,一般情况下,只要在发布历史记录后不要更改历史记录。但是,如果您确定没有其他人在您的远程存储库上工作,您仍可以执行此操作:在本地修复您的历史记录并强制将其推送到存储库。

使用git rebase -i可以轻松在本地更改历史记录。不幸的是,对于存储库的根提交,它有点棘手。有关详细信息,请参阅Change first commit of project with Git?

答案 2 :(得分:1)

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

您可以在命令行上使用以下脚本来修复仓库中错误的作者姓名。

$ 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