別の回答へのコメントに基づいて、開発は次のようになります。
C2 --- C3 --- C4 --- F2 --- C5 <-- master, origin/master (or similar)
\
W1 --- FX --- W2 --- W3 --- W4 --- W5 <-- workbranch
FX数週間前に作業ブランチに修正を書き、W1を介してコミットしW5ました。彼ら (誰が管理しているorigin/masterか、origin/featureまたはあなたがブランチで作業しているものは何でも) は、おそらく上記の他のコミット (C3を介してC5) と一緒に、最終的にそれをコミットするようになりました。これは別のコミットであるため (変更内容は同じですが)、 というラベルを付けましたF2。
上にブランチをリベースできますが、必要に応じて、少なくともF2からの変更を取得する必要があります。それが必要な場合は、次のようにします。C3C4C5
$ git rebase -i master
あなたがあなたの中にいる間workbranch。修正FXは既に含まれているため (現在は と呼ばれています)、引き継ぐ変更のリストからF2それ (リベースを開始するときに編集しているファイル内の行) を削除してpickから、対話型リベースを実行します。もちろん、別のコミット (上記の ) に基づいているため、各コミットW1がW5引き続き独自に機能することも確認する必要があります。C5そうでない場合は、別の作業を行いrebase -i、必要に応じて各コミットを修正する必要があります。また、リベースで競合が発生する可能性があり、手動で解決する必要があります。しかし、これがすべて機能すると仮定すると、次のようになります。
C2 --- C3 --- C4 --- F2 --- C5 <-- master, origin/master (or similar)
\
W1' --- W2' ... --- W5' <-- workbranch
'(数学表記から借用した一重引用符は、これらがコミット、などと単に「同じことを行う」新しいコミットであることを示します。これは、コミットの既存のチェーンを取得し、新しいチェーンを作成することです。古いチェーンと「同じことをする」別の場所から開始するコミットの、古いチェーンからラベル (この場合は <code>workbranch) を削除し、それを新しいチェーンに貼り付けます。)W1W2rebase
運が良ければ、「余分な」コミット (C3およびそれC4以上) はありません。作業ブランチがコミット C2 から外れると、リモートの「メイン ライン」の次のコミットは修正 F2 になります。コミットW1が修正で問題なく機能する場合は、次のようにします。
$ git rebase -i <sha1-of-F2>
その内容は と同じであるpickため、 commitの行を再度削除します。この場合、次のようなコミット ツリーが得られます。FXF2
C2 --- F2 --- C5 <-- master, origin/master (or similar)
\
W1' --- W2' --- W3' --- W4' --- W5' <-- workbranch
いずれの場合も、ここでのポイントは同じです: 変更の新しいチェーン (あなたの "作業" ork) を作成し、origin/whatever"彼ら" がバグ修正コミットを commit として配置した時点または後にFXポイントをハングアップさせますF2。ここでの問題も同じです.C2から分岐したときに作業をテストし、新しいワークチェーンが他のコミットから分岐したため、作業の一部またはすべてが微妙に壊れている可能性があります.
注: リベース作業を行う場合、元の作業にラベルを貼り付けておくことができます。これにより、元の一連のコミット ( W1、FX、W2、 ... 上記) に簡単にアクセスできます。次のようにします。
git branch original-workbranch workbranch
リベースを開始する前に。「新しい」バージョンですべて問題ないことに満足したら、余分なラベルを削除できます。
git branch -D original-workbranch
この「保存」ステップを忘れた場合、または気にせず、後で元の作業ブランチを回復したい場合は、事後 (通常は約 90 日間) に「参照ログ」を介して実行できます (「参考文献」を参照git reflog --help)。その時点でより多くの仕事。