--onto
とりあえずスキップしましょう。 upstream
そしてbranch
、かなり基本的なものであり、実際には一種の模倣でcheckout
あり、-2 branch
番目の引数はオプションです:
git branch <newbranch>
git branch <newbranch> <base>
git checkout -b <newbranch>
git checkout -b <newbranch> <base>
git rebase <upstream>
git rebase <upstream> <branch>
(別に、これらの引数の名前rebase
。、「上流」と「ブランチ」は非常にIMO記述されていない私は、一般的にpeachoftreeのようにそれらを考える、<start>
と<end>
私はそれらを使用することがありますどのようにしています、: git rebase <start> <end>
)
2番目のブランチを省略した場合、結果は、最初にそのブランチをチェックアウトしてから、そのブランチを指定していないかのように実行するのとほぼ同じです。例外はbranch
、現在のブランチを変更しないことです。
git checkout <base> && git branch <newbranch> && git checkout <previous_branch>
git checkout <base> && git checkout -b <newbranch>
git checkout <end> && git rebase <start>
rebase
呼び出されたときに何が行われるかを理解するために、私は最初にそれを特別なタイプのマージとして考えることから始めました。実際にはそうではありませんが、最初にリベースを理解し始めたときに役立ちました。peachoftreeの例を借りるには:
A--B--F--G master
\
C--D--E feature
このgit merge master
結果:
A--B--F-----G master
\ \
C--D--E--H feature
一方、git rebase master
(ブランチでfeature
!)結果は次のようになります。
A--B--F--G master
\
C'--D'--E' feature
どちらの場合も、とのfeature
両方のコードが含まれています。をオンにしていない場合は、2番目の引数を使用してショートカットに切り替えることができます 。上記と同じことを行います。master
feature
feature
git rebase master feature
今、スペシャルのために--onto
。これで覚えておくべき重要な部分は、<start>
指定されていない場合、デフォルトであるということです。したがって、上記で--onto
具体的に指定した場合、これは同じ結果になります。
git rebase --onto master master
git rebase --onto master master feature
(私が--onto
指定せずに使用することはありません。<end>
なぜなら、すでにオンになってfeature
いる場合、これら2つは同じだと思っていても、精神的に解析する方が簡単だからです。
なぜ--onto
役立つかを理解するために、ここに別の例を示します。私がオンfeature
になっていてバグに気付いたとしましょう。それを修正し始めましたfeature
がmaster
、誤ってではなく分岐してしまいました。
A--B--F--G master
\
C--D--E feature
\
H--I bugfix
私が望んでいるのは、これらのコミットが「bugfix
依存」しないように「移動」することですfeature
。現状では、この回答で上記に示したあらゆる種類のマージまたはリベースfeature
は、2 つのコミットとともに3つのコミットを取得しbugfix
ます。
たとえば、git rebase master bugfix
間違っています。たまたまからのすべてのコミットが含まれる範囲<start>
には、上で再生されます:<end>
feature
master
A--B--F--G master
\ \
\ C'--D'--E'--H'--I' bugfix
\
C--D--E feature
私たちが実際に望んでいるのは、の上で再生されるからfeature
までのコミットの範囲bugfix
ですmaster
。それ--onto
が目的です-「開始」ブランチとは異なる「再生」ターゲットを指定します。
git rebase --onto master feature bugfix
A--B--F--G master
\ \
\ H'--I' bugfix
\
C--D--E feature