ちょっとした文脈:私は最近、cvsimportを使用してCVSからGitに移行しました。現在、gitoliteによって管理される共通の(ベア)リポジトリがあり、そこで人々はローカルの変更をプッシュします。その後、古いCVS履歴の多くのタグが完全にインポートされていないことを発見しました。cvs2git(ローカル)を使用してCVSからの移行をやり直し、最初のリポジトリのブランチのヘッドをcvs2git(まだローカル)で指定された新しいツリーに移植することで、これを修正できます。これで、以前よりも優れた履歴を持つ完全なツリーができました。すべてのブランチのヘッドは、現在リモートにあるものと同じハッシュを持っています(この回答のように、グラフトとフィルターブランチを使用しました:https:// stackoverflow .com / a / 2428339/1005470)
私が今やりたいのは、それらの変更をリモートにプッシュすることです。もちろん、git push
すべてが最新であることが返されます。書き直された履歴をプッシュする方法がわかりません。refが一致するため、git push -f
すべてが最新であることも返されます。
さらに、もちろん、他の開発者が何かが変わったことにほとんど気付かないようにしたいと思います。次回プルしたときに更新された履歴が表示されるはずです(再クローンを作成する必要がある場合も問題ありません)。私は、彼らが支部の頭の前のコミットに基づいて作業を行っていないと想定しています(そうでなければ大きな混乱になることを私は知っています)。
編集:明確にするために、ここgit rev-list HEAD
に両方のリポジトリでの出力(の抜粋)があります。太字のコミットは、私が移植を行ったポイントです。リモートのそのポイントより下のすべてを、ローカルリポジトリにあるもので上書きしたいと思います。
ローカル リポジトリ:
fff881c238fff8b0057be8dab494ec5a6aa181d9
ac513b5596cca48dd885a969fdcc4a2b49e507d0
1b199d8e4ac29e4bd39ff96059031cf9b1390609
427837c98a14f28bc2e5d91fcf89e95
_リモートレポ:
6ad634da6e5acda43e6cf0919e8f4994c08ac862
bd32b7c9b0ae4faea51720b98586f89972b52e58
3778ce4ff85f269e2287d57c7aec3ecefabc135a
d3c343f3498d1d82b680be2ffc2c5e05c14a3d4c
a5d200b99f31a005cc8312d0a23a79d4014a2156
8b90afbbb06bea062d26b520c42c068ef96e5db7
fff881c238fff8b0057be8dab494ec5a6aa181d9
19cf091efb12413027941ac893ea8d503fea415e
efbed577d5986beef45ba0f9a2560f4b1ca120fc
bbec686e3389abe0679672a3d71c236b98ffc111
5b56665e48b3af51a25d0c9d2342d04e730aaa16
2ce095b0ed92f22baf74e728bda07bfded5a4e7b
...