2

私が2つのブランチを持っていて topic、ブランチにいるmaster 場合topic、実行すると、git rebase masterマスターまたはトピックブランチがリベースされますか?

することgit rebase --helpは私にこれを与えました

次の履歴が存在し、現在のブランチが「トピック」であると仮定します。

             A---B---C topic
            /
       D---E---F---G master

この時点から、次のいずれかのコマンドの結果:

       git rebase master
       git rebase master topic

だろう:

                         A'--B'--C' topic
                        /
           D---E---F---G master

注: 後者の形式は、git checkout トピックとそれに続く git rebase master の省略形です。リベースが終了すると、トピックはチェックアウトされたブランチのままになります。

これを達成したい場合はD---E---F---G---A---B---C master、マスターに切り替えて実行する必要がありますgit rebase -i topicか?

そして、git rebase -i topicA、B、C を C に押しつぶして になるように実行するとD---E---F---G---C master、次のようになります。noop

4

1 に答える 1

3

このような木から始めると仮定します

         A---B---C topic
        /
   D---E---F---G master

git rebase master次のようにするには、2つのコマンドを実行する必要があります

                     A'--B'--C' topic
                    /
   D---E---F---G master

次に、master実行からgit merge topic、早送りマージを実行し、次のようなツリーになります。

                             topic
                            /
   D---E---F---G---A---B---C -- master

マスターをチェックアウトしてgitrebaseトピックを実行できますか?

そのコマンドを実行すると、次のようなツリーになります。

                             topic
                            /
   D---A---B---C---E---F---G -- master

これは(多少編集された)gitドキュメントでrebaseあり、うまくいけばこれが役立つでしょう:

現在のブランチでコミットによって行われたが、アップストリームにはないすべての変更は、一時領域に保存されます。

topicオンにして実行している場合git rebase master、それはコミットA、B、およびCが一時的な領域に入るということを意味します。

現在のブランチはアップストリームにリセットされます。これは、git reset-- hardupstreamとまったく同じ効果があります。

この時点で、ツリーの一時的な状態は次のようになります。

                 topic
                /
   D---E---F---G -- master

以前に一時領域に保存されたコミットは、現在のブランチに1つずつ順番に再適用されます。

一時領域に保存されたコミットA、B、Cは、現在使用しているブランチに「再コミット」されtopicます。

                             topic
                            /
   D---E---F---G---A---B---C -- master

git rebase topicfromから実行masterすると、コミットA、B、Cを一時領域に配置する代わりに、コミットE、FGを一時領域に配置することを除いて、まったく同じ手順が実行されます。

于 2012-08-16T01:31:05.593 に答える