私は、マスターブランチに分岐してマージされたブランチやタグを含め、すべての履歴を保持したいマスターブランチを持っています:参考文献(タグ、支店など)を失うことなくGitの履歴にコミットを挿入してください
(v1.2.3)
T
A--B--C--D--E--F--G--H (master)
\ /
I----J (topic/1)
は今、私はこのように、(例えば後にAをコミット)無関係のmasterブランチの特定の位置に、Xを、コミット挿入したい:
(v1.2.3)
T
A--X--B'-C'-D'-E'-F'-G'-H' (master)
\ /
I'--J' (topic/1)
私は私が何かをしたいと思いますこれは最後に提案された方法と同様に、filter-branchとcherry-pickの組み合わせになりますthis answerにあります。
どうすればよいですか?
注:コミットXは競合を導入しないことを知っています。また、私はこの解決策を複数のコミットに拡張したいと思っています(私は現在、マスタ上のSHAを指定すると、マスターコミット後にどのコミットを挿入する必要があるかを知っています)。
なぜ履歴の早い段階でコミットを追加していますか?習慣的にそのようなリベースは、そのレポがチェックアウトされている他の誰かを混乱させます。あなたが持っている問題を解決するには、おそらくより良い方法があります。 – Schwern
それで、私がやっているのは実際にはいくつかのreposを1つにマージすることです。構造は、多くのコミット、ブランチ、タグを持つメインリポジトリが1つあり、すべての履歴を保存する必要があります。そして、私がメインリポジトリにマージするいくつかの小さなサポートリポジトリをコミットし、正しい順序で表示します(しかし、小さなリポジトリからのタグとブランチは重要ではありません - 私が必要とするのは、マスターからのコミットです)。また、これは新しいレポになるので、誰もが古いレポから新しいレポに切り替える予定です。 –
"正しい順序"とは、あなたが日付で意味すると思います。あなたは複数のリポジトリから履歴をインターリーブして、すべてのレポジスのように見せかけます。これは、作品がどのように開発され、コード考古学を妨げるか(すなわち、コードが書かれた理由を理解する)とは関係のない人工の歴史を作り出すでしょう。私はあなたの代わりにあなたのレポのマージと最高のそれを処理する方法についての質問をすることをお勧めします。 – Schwern