私には2つのプロジェクトがあります。1つはオリジナルのOSSプロジェクトです。誤って「フォーク」と呼ぶもう1つは、元のプロジェクトのブランチのコピーです。
フォーク内のコードは、Githubのソースzipからインポートされました。(これはあなたのやり方ではないという事実を非常に承知していますが、私の前のチームがそれを行い、今はフォールアウトに対処する必要があります。この決定がそれに対して助言するために行われたときに私がいたらいいのにと思います、しかしそれはそれが何であるかであり、今正しく修正する必要があります)。
問題:
フォーク内のコードには、タグの元のプロジェクトのコードが含まれています1.2.0
。フォークのコードはその中にありmaster
ます。
フォークには、元のプロジェクトの一部ではない変更があります。
当然のことながら、元のプロジェクトも存続し、バージョンに到達しました1.6.0
。
新しく始めて、次のことを行いたいと思います。
(本当に)元のプロジェクトを(そのすべての履歴とともに)フォークします。
1.2.0-modified
元のに基づくブランチを作成します1.2.0
。
変更を加えた変更をリポジトリから取得し、に適用します1.2.0-modified
。(リベースを試みましたが、マージ中に手動で変更した後、コードをビルドすることができました)。
先に進んでにリベースしたい場合は、最善の行動方針を知りたいと思い1.6.0
ます。
元のプロジェクトと「フォーク」の両方で変更が加えられていることを覚えておいてください。そのため、両方の側から履歴を保持できるようにしたいと思います。
これを行う適切な方法は何ですか?
明らかに、変更のために両方のリモコンを新しいフォークに追加し、両方をフェッチしました。
問題は、フォークからの変更をリベースした後1.2.0
、競合を解決して適切にビルドすることはできましたが1.6.0
、にリベースしようとすると、同じ修正をもう一度再適用しているように見えることです。元のブランチがに基づいていなかったためだと信じてい1.2.0-modified
ます。
これを回避するためのスマートで簡単な方法はありますか?
あなたはこの状況にあります(時間は左から右に流れます):
--o--2--o--3--o--o original
X--o--o--o fork
X
フォークされた履歴の最初のコミットが(正確にまたはほとんど)コミットと一致することがわかっている場合2
(タグ付けされていると仮定v1.2.0
)、履歴をつなぎ合わせることができます
git replace --graft X v1.2.0
これにより、この偽の履歴が作成されます。
--o--2--o--3--o--o original
\
X--o--o--o fork
これでgit rebase
、変更を元の履歴に簡単に関連付けることができます。あなたが得る:
--o--2--o--3--o--o original
\
o--o--o fork
これで、で移植片を削除できますgit replace -d
(ただし、このバージョンの使用方法はわかりません)。
編集:いくつかの中でコミットマークされoriginal
て3
(タグ付けされていることを前提としていv1.3.0
たコメントに対処します)。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加