为了账号安全,请及时绑定邮箱和手机立即绑定

如何将提交作者更改为一个特定提交?

如何将提交作者更改为一个特定提交?

Git
犯罪嫌疑人X 2019-07-01 10:52:12
如何将提交作者更改为一个特定提交?我想更改历史上一个特定提交的作者。这不是最后一次承诺。我知道这个问题-如何在git中更改提交的作者?但我在想一些事情,我用散列或短时散列来识别提交。
查看完整描述

3 回答

?
心有法竹

TA贡献1866条经验 获得超5个赞

在历史记录中比需要修改的提交早一点的交互式重基(git rebase -i <earliercommit>)。在重定向提交的列表中,将文本更改为pickedit在要修改的散列旁边。然后,当git提示您更改提交时,请使用以下命令:

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

例如,如果提交历史记录是A-B-C-D-E-F带着FHEAD,而您想要更改CD那你就.。

  1. 指定

    git rebase -i B (下面是执行git rebase -i B命令)

    • 如果你需要编辑

      A

      ,使用

      git rebase -i --root

  2. 为这两种情况更改行

    C

    D

    从…

    pick

    edit

  3. 一旦重基开始,它将首先在

    C

  4. 你会

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

  5. 然后

    git rebase --continue

  6. 它会在

    D

  7. 那你就会

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

    再一次
  8. git rebase --continue

  9. 重新基地就完成了。
  10. 使用

    git push -f

    若要使用更新的提交更新源,请执行以下操作。


查看完整回答
反对 回复 2019-07-01
?
慕沐林林

TA贡献2016条经验 获得超9个赞

这个接受答案这个问题是一个非常巧妙地使用交互式重基的方法,但不幸的是,如果我们试图更改以前的作者在随后被合并的分支上的提交,那么它就会显示出冲突。更普遍地说,当处理混乱的历史时,它不起作用。

由于我担心运行依赖于设置和取消设置环境变量来重写git历史的脚本,所以我编写了一个基于这个职位它类似于这个答案但更完整。

以下是测试和工作,不像链接答案。为了清楚地阐明03f482d6是我们试图替换的提交者,并且42627abe是与新作者的承诺。

  1. 签出我们试图修改的提交。

    git checkout 03f482d6
  2. 让作者改变。

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

    现在,我们有一个假设为Hash的新提交42627abe.

  3. 检查原来的分支。

  4. 将旧的提交替换为本地的新提交。

    git replace 03f482d6 42627abe
  5. 基于替换重写所有未来提交。

    git filter-branch -- --all
  6. 为保持清洁而拆下更换物。

    git replace -d 03f482d6
  7. 推送新的历史记录(只有在下面失败时才使用强制,并且只有在使用git log和/或git diff).

    git push --force-with-lease

与4-6不同,您只需重新定位到新提交:

git rebase -i 42627abe


查看完整回答
反对 回复 2019-07-01
?
慕丝7291255

TA贡献1859条经验 获得超6个赞

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

#!/bin/shgit 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


查看完整回答
反对 回复 2019-07-01
  • 3 回答
  • 0 关注
  • 535 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信