2

git filter-branchgit リポジトリの一部の作成者の名前を変更するためにa を実行したところ、次のようになりました。

$ 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 answer を見るとgit filter-branch、重複自体を解決する必要があるようです。決議ってそういうことですか?326 個の重複コミットがありますか?

前もって感謝します。

編集git filter-branchこれが私が実行するスクリプトです。複数の電子メール アドレスの名前を 1 人のユーザーに変更する簡単な 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

同じ親を持つコミットが既に 2 回ある可能性があります。git filter-branchフィルターが指定されていない場合、これを検出して修復します。作成者を変更する前に、まずこれを試してください。

また、現在は区別されているが、スクリプトによる変換後は同一になるペアの親を持つコミットがある場合もありますfilter-branch。コマンドが正しければ、filter-branch作業が失われることはありません。履歴には、現在統合されている書き換え前および書き換え後のコミットの並列セットがありました。

于 2013-03-03T05:20:32.163 に答える