Ind*_*oad 5 git merge git-rebase git-workflow
我知道标题有点毛茸茸 - 因此引用!
假设我有一个分支,b_feature分支并合并到主开发分支b_master.还有另一个分支,b_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
Run Code Online (Sandbox Code Playgroud)
我知道我可以把整个东西作为一个单一的差异来挑选git cherry-pick -m Mm,给予
----Br--Squashed----> b_release
Run Code Online (Sandbox Code Playgroud)
其中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
Run Code Online (Sandbox Code Playgroud)
但这似乎是一个笨重的解决方案,我不知道更优雅的解决方案!
rebase --onto b_release Bm Mm 也似乎没有产生我正在寻找的结果.
有更好的方法吗?
我认为 rebase 是比cherry-pick 更合适的工具,尽管差异很小。这是我的做法。首先将 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
Run Code Online (Sandbox Code Playgroud)