私のオススメ度(または「オレンジ氏の場合はどうしたらよいか」)は、git fetch
で始まります。今、私はレポの中でこれを持っていきます。これは、ブロンドがリベースした後で、 "git push -f"を実行する直前のものです。
M1 - M2 - M3
\ \
\ \
A1 - A2 A1' - A2'
一つの重要な違いは、私は私のA2を吹けを指しローカルラベルA
、およびリモートラベルremotes/origin/A
はA2' を指している必要があります、です(ミスターブロンドは、ローカルラベルA
が指して、それを他の方法で回避していましたA2 'およびremotes/origin/A
)。
私は「」私が代わりにこれを持っているだろうという名前の枝の私のコピーで作業してきた場合:私の地元のラベルがA3よりもむしろA2を指していると(
M1 ---- M2 ---- M3
\ \
\ \
A1 - A2 - A3 A1' - A2'
;またはA4またはA5私が適用した変更の数に応じて、)今私がしなければならないのは、私のA3(そして、必要であればA4など)をA2 'にリベースすることだけです。 1つの明白な直接的な方法:その後、
$ git branch -a
master
* A
remotes/origin/master
remotes/origin/A
$ git branch new_A remotes/origin/A
$ git rebase -i new_A
と修正のものがA1' とA2' としてnew_Aにあるので、完全に回転数A1とA2をドロップします。または:
$ git checkout -b new_A remotes/origin/A
$ git format-patch -k --stdout A3..A | git am -3 -k
(git am -3 -k
方法はgit-format-patch
マニュアルページに記述されています)。
これらの私は彼が彼のrebase
、すなわちをした前に、ミスターブロンドは、第二のアプローチが成功した場合は私が終わる
などA1、A2、A3を、識別し、しなかったことを持っているものを考え出す必要とします:
M1 ---- M2 ---- M3
\ \
\ \
A1 - A2 - A3 A1' - A2' - A3'
私のブランチ名A3' へnew_A
ポイントは(私の既存A
ブランチはまだ古いA3を指します)。私が最初のアプローチを使って成功すると、同じことが起こります。既存のブランチ名A
がA3 'を指すようになりました(そして、A1-A2-A3の古いブランチの名前はありません。私のレポにはまだありますが、それを見つけるにはreflogなどが必要です)。
(私のA3はもちろん、インタラクティブなリベースと 『gitの午前、』法の両方が私が作業が必要になります、A3' になるために修正が必要な場合。)
もちろんそれはちょうどgit merge
(なども可能ですゲイリーFixlerによって答えで)、それは与え、下記の番号なし、と(「M」)コミットと可視回転数A1とA2を保つマージを作成します。あなたは、元のA1を保持したい場合は
M1 ---- M2 ---- M3
\ \
\ \
A1 - A2 - A3 A1' - A2' -- M
\_______________/
をそしてA2、これは良いことです。あなたがそれらを取り除きたいのであれば、それは悪いことです。だから、 "何をするか"は、 "結果が欲しいもの"に依存します。
編集する追加:私はすべてが良いことを確認しながら私の古いAブランチの名前を残すように、より良いフォーマット - パッチ方法が好きです。
$ git branch -m A old_A
$ git branch -m new_A A
とold_Aを完全に放棄することができれば、その後、::すべての作品、それを仮定してが良いですが、ここでは最後の数歩だ
$ git branch -D old_A
または、同等に、削除支店で始まるが、
注:その後、(new_A枝上に、A3などをリベースの目的のために、また
git rebase --onto
マニュアルを参照してください。編集)A.にnew_Aの名前を変更します。 '--'と' hard'の間に空白はありません。答えは正確にそれらの2つの間でラップされていたので、しばらく時間がかかりました:) – qbolec