git-svnと同期されているいくつかのブランチを「ハックする」ためにいくつかのリビジョンの履歴を書き直す必要があります(のリビジョン ...ブランチの全履歴を書き換えたくありません) 。私たちがgit-svnの詳細を取り出すならば、基本的には、ブランチのセクションの履歴を再作成して、親ののリビジョン(親だけが変更され、それ以外は何も変更されません)を再定義します。親がリビジョンを「簡単に」変更する方法は?
ブランチからいくつかのリビジョンを削除して、私が手動で作成する1つのリビジョン(コミットツリーを使用)に置き換えたいと思っています。私はのブランチからを削除します)最新のリビジョンのツリーを使用します。その後、私が削除したリビジョンの「上に」置かれたリビジョンを再作成します。私が歴史のリビジョンに置き換えているとすれば、子リビジョンを親を変更して "書き直し"プロセス自体から出てくる新しいリビジョンを使用するように "書き直す"ことができます(チェリーピックまたはリベース操作のように考える)。 ....私はチェリーピックまたはリベースをしたくないということだけです。私は既にオリジナルのリビジョンのツリーを持っているから、書き直そうとしています。
git コミットツリーは私がこれを行うために使用できるツールになると思います(私はリビジョンのツリーオブジェクトを使用して書き換えたいと思っています。しかし、コミットツリーで定義するのは簡単ではありません(環境変数を使用する必要があります。メッセージはstdinから読み込むことができます)。 がでない場合は、最も簡単な方法は何ですか?コミットツリーを使用していますか?
'git replace'は基本的に' git commit-tree'を実行するためのラッパーで '--edit'モードを持ち、' refs/replace/'参照を書きます。それは行く方法のように思える。 – torek
スクリプトできないので、水を保持しません(何百回も行う必要があります)。今私は "書き換えたい"オブジェクトを使って '' git hash-object'''を使って "手で"オブジェクトを作成し、必要なものに合わせてその親を修正することができるかどうか疑問に思っています。 – eftshift0
ああ、スクリプトコードでこれをやりたければ 'git-sh-setup'に' git filter-branch'がすべてのコミット情報をマジックenv変数に取り出すためのコードがあります。たとえば、 'get_author_ident_from_commit'とフィルタブランチスクリプト' set_ident'と 'finish_ident'を参照してください。 – torek