2

次のような git リポジトリがあります。

   A - B - C - D - E - F
   ^                   ^
   |                   |
Staging              master

ステージング ブランチ ポインターを E に移動したいのですが、コミット B と D をブランチに入れたくありません。B と D をそれぞれのブランチに入れたい。

            Staging
               |
               V
A ---- C ----- E - F <- master
  \               /
   B ----- D -----
           ^
           |
         new branch

コミットをマスター ブランチ チェーンから移動して独自のブランチに移動し、再度マスターにマージする方法がわかりません。

これは可能ですか?

4

3 に答える 3

1

A に基づいて 2 つの新しいブランチを作成します。

git branch staging-new A
git branch new-branch A

次に、cherry-picking を使用して、各ブランチに必要なコミットを選択します。

git checkout staging-new
git cherry-pick C E

new-branch についても同様です。

その後、古いブランチ Staging を削除できます。マスターはそのままです。

ノート:

  • 中間コミットのいずれかがマージ コミットである場合、これはより複雑になります (マージ コミットのチェリー ピックがより複雑になるため)。
  • ブランチ Staging を再作成しているため、それに基づくすべてのブランチ (自分または他のユーザーによる) を変更する必要があります (通常は再ベース)。
  • チェリーピッキングは新しいコミットを作成するため、説明したとおりのものは得られません。そのため、staging-new と new-branch はmaster の先祖にはなりません(写真のように)。それを取得するには、リベースを使用してマスターの履歴を変更する必要があります。もちろん、これは通常、マスターをまだ共有していない場合にのみ推奨されます。
于 2013-08-17T22:01:13.810 に答える
0

git cherry-pickあるブランチから別のブランチにコミットを選択的に移動するために使用します。

この記事が役立つかもしれません: http://technosophos.com/content/git-cherry-picking-move-small-code-patches-across-branches

および git マニュアルから: http://git-scm.com/docs/git-cherry-pick

于 2013-08-17T22:00:55.810 に答える