问题描述
原始:
A---B---C(master) / D---E---F---G(server) /H---I(client)
H, I 从 server 分支分出来,但不依赖 server,client已经完工,想单独提取 H, I 洐合到 master, 于是执行 git rebase --onto master server client 结果是:
A---B---C(master)---H---I(client) / D---E---F---G(server) /H---I
PS: 不要觉得例子奇怪,它来自 https://git-scm.com/book/en/v2/Git-Branching-Rebasing#More-Interesting-Rebases
以上是 rebase 的操作,采用 merge 的操作,执行 git merge --squash client master; git commit, 结果是:
A---B---C(master)---J(D+H+I) / D---E---F---G(server) /H---I(client)
那么问题来了:有没有类似 git merge --squash server...client master 或者 git rebase --onto master server client --squash 的操作,实现的效果如下:
A---B---C(master)---J(H+I) / D---E---F---G(server) /H---I(client)
PS: 我知道可以先rebase --onto 到 temp 分支,再 merge --squash 到 master,但这太不优雅了不是?
问题解答
回答1:已有答案,用 rebase --interactive 做 squash 标记最好,居然忘记了:
git checkout clientgit rebase master -i
或者
git checkout clientgit reset --soft HEAD~2git commit -m ’add client’git checkout mastergit cherry-pick client
看各位还有否其它思路