2

我运行 agit 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
4

1 回答 1

3

您可能已经有两次具有相同父级的提交;git filter-branch没有指定过滤器将检测到并修复它。在进行任何作者更改之前,请先尝试此操作。

filter-branch您可能还与一对当前不同但在您的脚本转换后将相同的父母进行提交。如果你的filter-branch命令是正确的,那么你并没有丢失任何工作——你只是在你的历史中拥有一组并行的重写前和重写后提交,现在它们已经统一了。

于 2013-03-03T05:20:32.163 回答