在一个特定的提交中更改提交作者

我想改变历史中某个特定提交的作者。 这不是最后一次提交。

我知道这个问题 - 我如何更改git中提交的作者?

但是我在思考什么,在哪里我通过散列或短散列标识提交。


从历史早期的一个点开始交互重新分配,比你需要修改的提交( git rebase -i <earliercommit> )。 在重新分配的提交列表中,将文本从pick更改为您要修改的哈希旁边的edit 。 然后当git提示你改变提交时,使用这个:

git commit --amend --author="Author Name <email@address.com>"

例如,如果您的提交历史记录为ABCDEFFHEAD ,并且您想要更改CD的作者,那么您会......

  • 指定git rebase -i B (这里是你执行git rebase -i B命令后会看到的一个例子)
  • 如果您需要编辑A ,请使用git rebase -i --root
  • pickedit更改CD的行
  • 一旦开始重新启动,它会首先在C暂停
  • 你会git commit --amend --author="Author Name <email@address.com>"
  • 然后git rebase --continue
  • 它会在D再次停顿
  • 然后你会再次git commit --amend --author="Author Name <email@address.com>"
  • git rebase --continue
  • 重建将完成。

  • 这个问题被接受的答案是巧妙地使用了交互式rebase,但是不幸的是,如果我们试图改变原来的作者在后来合并的分支上的提交,那么它就会表现出冲突。更一般地说,它不起作用处理凌乱的历史。

    由于我担心运行的脚本依赖于设置和取消设置环境变量来重写git历史记录,因此我正在撰写一个基于此帖子的新答案,它与此答案类似,但更为完整。

    以下是测试和工作,不像链接的答案。 假设为了清楚说明03f482d6是我们试图替换作者的提交, 42627abe是新作者的提交。

  • 检出我们试图修改的提交。

    git checkout 03f482d6
    
  • 让作者改变。

    git commit --amend --author "New Author Name <New Author Email>"
    

    然后检出原始分支。

  • 在本地替换旧的提交。

    git replace 03f482d6 42627abe
    
  • 根据替换重写所有将来的提交。

    git filter-branch -- --all
    
  • 取下更换的清洁。

    git replace -d 03f482d6
    
  • 推送新的历史记录(只有在下面的失败时才使用--force,并且只有在使用git log和/或git diff进行完整性检查之后)。

    git push --force-with-lease
    

  • Github文档包含一个脚本,用于替换分支中所有提交的提交者信息。

    #!/bin/sh
    
    git filter-branch --env-filter '
    
    OLD_EMAIL="your-old-email@example.com"
    CORRECT_NAME="Your Correct Name"
    CORRECT_EMAIL="your-correct-email@example.com"
    
    if [ "$GIT_COMMITTER_EMAIL" = "$OLD_EMAIL" ]
    then
        export GIT_COMMITTER_NAME="$CORRECT_NAME"
        export GIT_COMMITTER_EMAIL="$CORRECT_EMAIL"
    fi
    if [ "$GIT_AUTHOR_EMAIL" = "$OLD_EMAIL" ]
    then
        export GIT_AUTHOR_NAME="$CORRECT_NAME"
        export GIT_AUTHOR_EMAIL="$CORRECT_EMAIL"
    fi
    ' --tag-name-filter cat -- --branches --tags
    
    链接地址: http://www.djcxy.com/p/1413.html

    上一篇: Change commit author at one specific commit

    下一篇: Modify commit message of past commit in git