我只是将旧存储库(SVN和VSS)转换为Git,其中有许多我想纠正的错误信息。在某些时间段内,我有错误的作者/提交者,因为相同的用户已经使用2次登录,并且在这里使用了同事的登录。
我将git filter与--after选项一起使用以查找相应的提交ID,现在有了一个文本文件,其中的提交ID必须逐行存储,其中仅作者需要替换。
我现在尝试使用
git commit --amend --author="<my new author>" --no-edit <commit hash>
现在要替换各自的提交,但是我总是在这里收到一条消息
did not match any file(s) known to git
据我了解,我首先必须签出提交,然后对其进行更改,然后对其重新设置基础。只有这样,所有过滤的提交ID才会更改。
我需要一个解决方案,其中遍历文本文件的每一行,然后为每个ID设置作者并在最后进行变基:
for i in $(cat /tmp/commitids.txt); do
<I dont know the correct git command to replace the author of the commit in $1>
done;
<I don't know the correct rebase command for all the changes>
答案 0 :(得分:1)
您想要过滤分支,它为您处理id重写,您只需提供内容和元数据更改即可。在您的情况下,假设您的commitids文件是制表符分隔的哈希码,作者姓名,作者电子邮件,它将非常接近(键盘到文本框警告)
git filter-branch --setup '
declare -A authors; while read id auth; do authors[$id]=$auth; done <commitids
' --env-filter '
[[ -v authors[$GIT_COMMIT] ]] && {
GIT_AUTHOR_NAME=${authors[$GIT_COMMIT]}
GIT_AUTHOR_EMAIL=${authors[$GIT_COMMIT]}
GIT_AUTHOR_NAME=${GIT_AUTHOR_NAME%$'\t'*}
GIT_AUTHOR_EMAIL=${GIT_AUTHOR_EMAIL#*$'\t'}
}
'