2013-10-31 22 views
18

私の枝を移動するには、次のとおりです。Gitのリベース:コピーの代わりに、

o---o support.2013.16 
    \ 
     o---o---o---o---o master 
         \ 
         o---o---o hotfix/A 

は私がsupport.2013.16に修正プログラム/ Aをコピーする必要があります。私はチェリーピッキングを認識してんだけど、それは枝を移動する代わりに、それをコピーせず

git rebase --onto support.2013.16 master hotfix/A 

が、のような何かを行うことは可能でしょうか?

+5

であなたを残します。元の 'hotfix/A'ブランチは変更されません。 – qqx

答えて

35

Git rebaseは本当に元のブランチを新しいものにコピーします。ブランチヘッドを動かすので、コピーではなく移動のように感じます。 git branchを使用して元のブランチに追加のブランチヘッドを追加した場合、git rebaseが元のブランチにコピーされた後でも元のブランチに簡単にアクセスできます。だからあなたの例では

git branch rebased-A hotfix/A 
git rebase --onto support.2013.16 master rebased-A 

あなたはリベースを使用し、その後、新しいブランチ名を作成するために `最初​​-b` Gitのチェックアウトを使用することができ

 o---o---o rebased-A (hotfix/A') 
    /
o---o support.2013.16 
    \ 
     o---o---o---o---o master 
         \ 
         o---o---o hotfix/A 
+1

これは他の( 'git checkout -b')解決法と同じことに注意してください。 (コミットツリーに描かれているので、私はこの答えが気に入っています:-)) – torek

7

新しいブランチ作成することができます。

git checkout -b hotfix/A-support hotfix/A 

をし、代わりにそれをリベース。だからあなたは2つの枝を持つでしょう。ブランチをsupportブランチにマージした後にブランチを削除することもできます。

また、hoftix/Agit merge-base support.2013.16 masterにリベースすると、hotfix/Aを両方のブランチに簡単にマージできます。それはあなたにもっときれいな歴史を与え、重複したコミットはしません。

関連する問題