在一个特定的提交中更改提交作者
我想改变历史中某个特定提交的作者。 这不是最后一次提交。
我知道这个问题 - 我如何更改git中提交的作者?
但是我在思考什么,在哪里我通过散列或短散列标识提交。
从历史早期的一个点开始交互重新分配,比你需要修改的提交( git rebase -i <earliercommit> )。 在重新分配的提交列表中,将文本从pick更改为您要修改的哈希旁边的edit 。 然后当git提示你改变提交时,使用这个:
git commit --amend --author="Author Name <email@address.com>"
例如,如果您的提交历史记录为ABCDEF且F为HEAD ,并且您想要更改C和D的作者,那么您会......
git rebase -i B (这里是你执行git rebase -i B命令后会看到的一个例子) A ,请使用git rebase -i --root pick到edit更改C和D的行 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
