2

私は今、このように見える歴史を持っています:

                  origin/master
                        |
A --- B --- C --- D --- E
                   \
                     -- F
                        |
                     master

E の後に変更 (commit F) をリベースしたいのですが、commit EI にはかなり大きな問題がいくつかあり、最初に修正したいと考えています。基本的に、これは私が到達できるようにしたいものです:

                  origin/master
                        |
A --- B --- C --- D --- E --- G
                   \
                     -- F
                        |
                     master

次に、最終的な単純な結果を得るために、最後に F をリベースします。

                              origin/master
                                    |
A --- B --- C --- D --- E --- G --- F

メイントランクで作業している間、コミット F を「脇に置き」、後でそれをリベースするにはどうすればよいですか? が含まれるとgit branch思いますが、発行するコマンドのシーケンスを知るのに十分なgitを知りません。これを行う最善の方法は何ですか?

4

2 に答える 2

2

Fコミットを指すブランチを作成します。

git branch tmp

ブランチFからコミットを削除:master

git reset --hard HEAD~1

修正を行い、コミットします。

git commit

F現在のブランチの上にコミットを追加しmasterます (これにより競合が発生する可能性があるため、競合を解決してください)。

git cherry-pick tmp

一時的なブランチを削除:

git branch -d tmp

したがって、ここでは実際には必要ありません。git rebaseより複雑なことのためか、少なくとも 1 つのコミットで作業するためではありません。

于 2012-08-16T05:16:49.973 に答える
0

そうでない場合は、F用の別のブランチがあると思います-見逃したので、作成する必要があります。
コミット G を使用して master で作業しないことをお勧めしますが、別のブランチも用意して
ください。別のブランチを作成してください。
1. 次に、そのブランチに対して f を含むブランチのリベースを試みます (
別の方法があると思いますが、おそらく git rebase --onto を使用します)
。これを行う別の方法として、git format-patch origin/ を実行します。 F を含むブランチでマスターし、G を含むブランチにこのパッチを適用します。
もちろん競合が発生する可能性があります。
私の経験に基づくと、オプション1の方が優れています。何らかの理由で、 git apply と git am は、別のブランチに対してリベースを実行するよりも「壊れやすい」(悪い用語で申し訳ありません)。

于 2012-08-16T05:15:36.810 に答える