2

私は他の誰かのリポジトリ(カタルシスの理由でそれらを「gitnoob」と呼びましょう)から変更をプルしていますが、それらはすべて混ざり合っています。彼らは最初はすべてのために彼らのメインブランチで働いていたようで、それからブランチについて学びました。これは少し次のようになります。

                  d - f <--- stuff
                 /   /
A - b - 1 - c - 2 - E <--- dev

数字は別のブランチにあるはずのコミットであり、自分のdevブランチにマージすると問題が発生する可能性があります。upstream/dev(後でマージされたら、共有の親リポジトリからプルしますupstream。)小文字はの一部である必要があるコミットでstuffあり、大文字は合法的にマージされたコミットdevです。

理想的には、これを自分の側でクリーンアップしたいと思います。ローカルで次のようなものを作成します。

  b - c - d - f <--- stuff
 /           /
A --------- E <--- dev

これで、関連するstuffすべてのstuff変更がとにかく発生します。これは、その時点までのすべての違いも含まれるためです(gitnoob/stuffそして、正当な変更はすでに私のブランチにあります)。問題は、それはコミットとも持つことを意味し、それは物事を壊す可能性があります。upstream/devgitnoob/devdevdevstuff12

私は、gitnoob/stuff膨大な量の手間をかけずに(そして、可能であれば、上流に表示されるまで1と2をそこに戻すことなく)変更をプルできるようにする必要があります。元に戻すか削除しました。

どうすればよいですか?それとも私は1と2で立ち往生していstuffますか?

4

2 に答える 2

1

そのような状況では、過去をそのままにして、将来はもっとうまくやっていくことをお勧めします。

bそれらをc出し入れし、devそれらを中にのみ持つことの利点は何stuffですか?後stuffに分岐したので、とにかくコミットは含まれています。devcstuff

私もたまにそういうことをしたくなりますが、普段はそう思ってしまうのでしょうか?これは、Gitを学び、SVNから切り替えたときに行われたコミットに特に当てはまります。何かがうまくいかなかった。わかった。しかし、それは機能します。だから触れないでください。

バージョン管理はツールであり、それ自体が目的ではありません。リポジトリにコードを入れます。それは貴重なことです。リポジトリの歴史が混ざり合っているわけではありません。

ブランチをローカルで修正することもできますが、アップストリームから物事をマージしたり、そこに変更をプッシュしたりする場合は、問題が発生します。

于 2012-08-23T18:39:47.497 に答える
1

したがって、基本的には、元に戻すプライベートバージョンが必要ですが、それでもgitnoobがプルできるプライベートバージョンが含まれていますstuff。これをシームレスに行う方法はありませんが、それを実現する1つの方法は、いくつかの新しいブランチを導入することです。12stuff

...d-f <---stuff-upstream
      \
       g <---reverted-stuff
        \
         h <---my-stuff

あなたがすることは、reverted-stuff元に戻すブランチを1作ることです2。gitnoobと共有される変更を加えたい場合は、から分岐しreverted-stuffて作成しmy-stuffます。を通常どおりに変更してコミットしmy-stuffます。devにマージすることもできるはずですmy-stuff

変更を共有する準備ができたら、my-stuffstuff-upstream使用してリベースしgit rebase --onto stuff-upstream reverted-stuff my-stuffます。それはあなたの復帰を取り除き、それがから直接分岐したgように見えるようにし、gitnoobが恐れることなく引っ張ることを可能にします。my-stuffstuff-upstream

gitnoobからプルするときは、にプルしてからstuff-upstream、にマージしreverted-stuffます。そのマージは自動的に再適用さgれ、元に戻した場所12。次に、から新しいブランチを作成できmy-stuffますreverted-stuff

そうは言っても、もしあなたが言うの12同じくらい本当に問題があるなら、あなたは彼のブランチからもそれを取り除くことによってgitnoobに恩恵を与えるでしょう。それがそれほど悪くなければ、これらすべてを経験する理由は本当にありません。

于 2012-08-23T20:03:09.550 に答える