我运行了git filter-branch
来重命名我的git存储库中的一些作者,我得到了:
$ git log --oneline | wc -l
665
$ ./git-rename-author.rb "First Last" new-email@email.com old-email@email.com
Rewrite 453a72b4f690620c04fce80a0aa237b9dee7038f (653/665)error: duplicate parent f61ea265c9069723f58557c55d3efae450ab2bd0 ignored
Rewrite 566c89fd59cf7e5c2992ee11adbf876343dc4a85 (665/665)
$ git log --oneline | wc -l
339
所以整个我从665提交开始,我以339结束。
查看git - duplicate parent答案,似乎git filter-branch
应解决重复问题。分辨率是什么?是否有326次重复提交?
提前谢谢。
修改:这是我运行的git filter-branch
脚本。这是一个简单的Ruby脚本,可以将多个电子邮件地址重命名为一个用户。
#!/usr/bin/env ruby
ARGV[2].split(',').each do |old_email|
puts "Renaming #{old_email} to #{ARGV[0]} <#{ARGV[1]}>"
env_filter = <<-EOS
'
an="$GIT_AUTHOR_NAME"
am="$GIT_AUTHOR_EMAIL"
cn="$GIT_COMMITTER_NAME"
cm="$GIT_COMMITTER_EMAIL"
if [ "$GIT_AUTHOR_EMAIL" = "#{old_email}" ]
then
an="#{ARGV[0]}"
am="#{ARGV[1]}"
fi
if [ "$GIT_COMMITTER_EMAIL" = "#{old_email}" ]
then
cn="#{ARGV[0]}"
cm="#{ARGV[1]}"
fi
export GIT_AUTHOR_NAME="$an"
export GIT_AUTHOR_EMAIL="$am"
export GIT_COMMITTER_NAME="$cn"
export GIT_COMMITTER_EMAIL="$cm"
'
EOS
system "git filter-branch -f --env-filter #{env_filter}"
end
答案 0 :(得分:3)
您可能已经拥有两次具有相同父级的提交;没有指定过滤器的git filter-branch
会检测到并修复它。在进行任何作者更改之前,请先尝试这一点。
您可能还提交了一对父级,这些父级目前是不同的,但在您的filter-branch
脚本转换后将完全相同。如果您的filter-branch
命令是正确的,那么您没有丢失任何工作 - 您在历史记录中只有一组并行的重写前提交,现在已统一。