免責事項:私は今これをテストしており、期待どおりに動作しているようです(もちろん、あなたが正しくあなたを理解したと仮定して)。しかし、まだ間違っていることがたくさんあります。 絶対にプロジェクトのリポジトリの別の作業コピーでこれを試してみて、どこにでもプッシュする前にすべてを調べてください。これを行う前の状態の完全なディレクトリバックアップを保持します。
私はあなたが2つの独立したリポジトリを持っていると仮定します。元のプロジェクト(Gephi):
A---B---C---D---E
^HEAD of Gephi
そして、最初のリビジョン、元のプロジェクトの最後のリビジョンと同じに見えるプロジェクト、:
E'---V---W---Y---...---Z
^HEAD of your project
(おそらくいくつかの支店を持つが、それは本当に問題ではありません。 。ここで私が正しく理解している場合あなたは(したいのですがどのような)
)は次のとおりです。
A---B---C---D---E---V---W---Y---...---Z
あなたは以下を試すことができます。 もう一度、これを独自の作業ツリーで行い、全てを中央のリポジトリにプッシュする前にすべてが正しいかどうか確認してください!
独自の作業ツリーのディレクトリに、元Gephiリポジトリの頭やオブジェクトをフェッチしながら:
git fetch /path/to/original/gephi
あなたはGephiリポジトリをクローン化していない場合、あなたにもgithubのを指定するかもしれませんがローカルのファイルシステムのパスではなくURL。
これはあなたの現在の作業ツリーで、次のような状況になります:
A---B---C---D---E
^FETCH_HEAD
E'---V---W---Y---...---Z
^HEAD
私たちは多くのことを変更していません。現在、2つのヘッドは互いに平和的かつ完全に独立して共存していますが、両方のリポジトリのオブジェクトにアクセスできるようになり、それらを結合しようとすることができます。
我々は今、(それがEと同一である必要があります)、E「を破棄し、代わりに、Eにこれを行うにはV.あるプロジェクトの最初のコミットの親を、作りたい、あなたは使用することができgit filter-branch
:
git filter-branch -f --parent-filter 'test $GIT_COMMIT = <V> && echo "-p <E>" || cat'
<V>
と<E>
をそれぞれVとEのコミットハッシュで置き換えます。それらを見つけるには、git log
を実行してプロジェクトのコミットを調べてから、それを取得してからgit log FETCH_HEAD
にGephiのコミットを調べることができます。
これは実質的にそれが元Gephiリポジトリのヘッドは(すなわち、最新のコミット)、あなたは上のプロジェクトをベースとするものではないという意味ことが判明した場合、これでも動作するはずE.
に直接Vを接続しますあなたが(まだ?)世話していないGephiに新たなコミットがあったということです。ちょうど、<E>
を、あなたの変更に基づいているコミットのハッシュで置き換えるには、ではなく、という頭を付けてください。
逆に、<V>
を最初に変更したのハッシュに置き換えてください。リポジトリにEと同じEが含まれていない可能性がありますが、最初のコミットにはすでに元の変更が含まれています。その後、この最初のコミットハッシュはあなたの<V>
になります。
A---B---C---D---E---F---G---H---I
^ ^FETCH_HEAD
point where your project branched off
V---W---Y---...---Z
^ ^HEAD
first change based on E
ただ、この文脈では意味をなさないコミットハッシュを使用してください:あなたの状況は、例えば、これは、ように見える場合は、上記のコマンドでも動作するはずです:両方の最後の段落を要約する
。
私はこれをテストしたところ、うまくいくと思われます(上に警告を更新しました)。私は今でも使い捨ての作業ツリーでこれを試して、完全なバックアップをとるようにアドバイスします。 'filter-branch'文を間違えたり、ハッシュを混ぜたりするのは簡単です! –
ローカルプロジェクトに複数のブランチがある場合、または履歴にマージがある場合、 'git rebase'はヒストリを線形化するので適切なツールではありません。代わりに 'filter-branch'を使用してください。 –
ありがとうございます。それは私が元々持っていたものだったが、私はrebaseがより簡単な構文を持っていると思った。私は変更を元に戻し、今度はfilter-branchを再度言及します。 –