2016-12-05 2 views
1

私は、マスターブランチに分岐してマージされたブランチやタグを含め、すべての履歴を保持したいマスターブランチを持っています:参考文献(タグ、支店など)を失うことなく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を指定すると、マスターコミット後にどのコミットを挿入する必要があるかを知っています)。

+1

なぜ履歴の早い段階でコミットを追加していますか?習慣的にそのようなリベースは、そのレポがチェックアウトされている他の誰かを混乱させます。あなたが持っている問題を解決するには、おそらくより良い方法があります。 – Schwern

+0

それで、私がやっているのは実際にはいくつかのreposを1つにマージすることです。構造は、多くのコミット、ブランチ、タグを持つメインリポジトリが1つあり、すべての履歴を保存する必要があります。そして、私がメインリポジトリにマージするいくつかの小さなサポートリポジトリをコミットし、正しい順序で表示します(しかし、小さなリポジトリからのタグとブランチは重要ではありません - 私が必要とするのは、マスターからのコミットです)。また、これは新しいレポになるので、誰もが古いレポから新しいレポに切り替える予定です。 –

+0

"正しい順序"とは、あなたが日付で意味すると思います。あなたは複数のリポジトリから履歴をインターリーブして、すべてのレポジスのように見せかけます。これは、作品がどのように開発され、コード考古学を妨げるか(すなわち、コードが書かれた理由を理解する)とは関係のない人工の歴史を作り出すでしょう。私はあなたの代わりにあなたのレポのマージと最高のそれを処理する方法についての質問をすることをお勧めします。 – Schwern

答えて

0

Aをチェックし、Xをコミットして、マージを保存したままXをマスタにリベースすることで、これを行うことができます。

  • git checkout A
  • ...編集、追加、およびXをコミット...
  • git checkout master
  • git rebase -p X

残念ながら、これはタグを保存しません。それを解決する方法はありますが、記事に対するあなたのコメントから、根本的な問題を解決するためのより良い方法があります。

+0

このような良い方法を参考にしてください。例えば、私はhttp://stackoverflow.com/a/618113/5778708を試しましたが、マスターの先端にある大きなマージコミットで異なるリポジトリをマージするだけなので、ブランチやコミットを簡単にチェックすることはできません過去からすべてのリポジトリのすべてのファイルを含めることを期待しています。 –

+0

@ m-bitsnbites 'git tag --merged 'を使うと、おそらくリベースによって影響を受けるすべてのタグを見つけることができます。それらを再マップすることを約束して、私は知らない。私が言ったように、あなたの問題を解決する良い方法があります。 – Schwern

関連する問題