6

私はタイトルが少し毛むくじゃらであることを知っています - したがって、引用符!

b_featureメインの開発ブランチから分岐してマージされたブランチがあるとしますb_masterb_releaseこれらの変更を (ポイント リリースとして) 追加したい別のブランチ があります。b_master分岐しb_releaseており、再びマージされることはありません。

---------Bm----k1-----Mm-----> b_master (k1 isn't to be included in b_release)
 \        \          /
  \        c1--c2--c3  (b_feature)
   \
    \----Br---------Mr-----> b_release
          \        / 
           cA-cB-cC

git cherry-pick -m Mmを使用して、すべてを単一の差分としてチェリーピックできることを知っています。

     ----Br--Squashed----> b_release

ここSquashedで、マージのメッセージとともに、機能のすべての変更を含むコミットですMm

しかし、変更履歴と個々のコミット メッセージを保持したい場合はどうすればよいでしょうか? このおおよそのワークフローを使用して、いつでも手動で選択できます。

git checkout b_release
git checkout -b b_release_feature
git cherry-pick c1^..c3
git checkout b_release
git merge b_release_feature
git commit --amend --reedit-message=Mm
git branch -d b_release_feature

しかし、これは、私が知らないよりエレガントなソリューションへの不格好な回避策のようです!

rebase --onto b_release Bm Mmまた、私が探している結果が得られないようです。

それを行うより良い方法はありますか?

4

1 に答える 1

-1

違いはわずかですが、リベースはチェリーピックよりも適切なツールだと思います。これが私がそれをした方法です。最初に b_release_feature ブランチをソース ブランチにアタッチしてから、それをターゲット ブランチにリベースします。

git checkout -b b_release_feature c3
git rebase --onto b_release c1^ b_release_feature
git checkout b_release
git merge b_release_feature
git commit --amend --reedit-message=Mm
git branch -d b_release_feature
于 2016-01-31T01:31:09.633 に答える