11

CVS リポジトリを git にインポートしようとしています。残念ながら、私たちは CVS リポジトリからリリースを作成する非常に古い方法を使用してきました。これは、実際の CVS ブランチやタグを含まず、その情報を別のシステムに保持しています。したがって、ほとんどすべての開発は CVS トランク上で行われます。そのため、1 つのファイルが履歴の非常に早い段階で追加される可能性がありますが、6 か月間はリリースの一部にはなりません。

私がやりたいのは、この CVS リポジトリを git にインポートし、リベースを使用してこれらのコミットを開発ブランチに移動することです。ただし、CVS からのブランチがいくつかあるので、すべてのブランチを移動したいと考えています。

私がこれを持っているとしましょう:

                  F---G---H topic
                 /
A---B---C---D---E---I---J master

B独自のブランチに移動したいコミットです。結果を次のようにしたい:

                F`---G`---H` topic
               /
A---C`---D`---E`---I`---J` master
 \
  B some_unfinished_feature

ただし、リベースのmaster結果は次のとおりです。

git checkout -b some_unfinished_feature B
git rebase --onto A B master

A---C`---D`---E`---I`---J` master
 \
  \               F---G---H topic
   \             /
    B---C---D---E
     \-some_unfinished_feature

1 回の rebase コマンドでgit を rebasetopicすることはできますか? E'対応する新しいコミットに移動したいブランチがたくさんある可能性があります。Eまたは、との間のマッピングを取得する方法はありE'ますか?

4

4 に答える 4

0

あなたの質問では、Cコミットから始めて移動したいと考えています。Bに基づいてブランチとして残されAます。

まず、名前を付けます。

git branch -b some_unfinished_feature <B-ish>

このコマンドは、コミットsome_unfinished_featureから始まるブランチを作成します。<B-ish>

<C-ish>上流です。リベースされるすべてのコミットを表示できます。

git log <C-ish>..topic

とは異なるブランチであるため、リベースされないことに気付くでしょうIJ後で個別にリベースする必要があります。

topicから<A-ish>開始するようにリベースします<C-ish>

git rebase -p --onto <A-ish> <C-ish> topic

-p<C-ish>flag は~から発生するマージを保持しますtopic

このコマンドが完了すると、次のようになります。

       some_unfinished_feature
     /
A---B---C---D---E---I---J master
  \
   C`---D`---E`
              \   
                F`---G`---H` topic

ここで、 fromにリベースmasterする必要があります<E-ish><I-ish>

git rebase -p --onto <E-ish> <I-ish> master

出来上がり:

A---B some_unfinished_feature
  \
   C`---D`---E`--I`---J` master
              \   
                F`---G`---H` topic
于 2018-05-18T17:30:19.043 に答える
0

移動するコマンドは次のtopicとおりです。

git rebase --onto E' E topic

残念ながら、さまざまなブランチの束に対してこれを自動的に行う方法はありません。これは設計によるものです。リベースごとに競合が発生する可能性があり、手動で解決する必要があります。

または、構成管理ソフトウェアでgit filter-branchを使用して、必要な変更をスクリプト化することもできますが、それはかなりの作業になる可能性があります。master開発ブランチとして保持しfilter-branch、リリース ブランチを作成するために使用する方が、その逆よりも理にかなっている場合があります。

于 2013-09-25T20:54:32.000 に答える