我有一个功能分支,有一些提交(见下文)。从分支开始,一些提交也被添加到掌握中。
所以我将master
合并到feature
分支。
git checkout feature
git merge master
这导致feature
分支上的以下日志历史记录:
* E (HEAD) merging master into feature
|\
| * D feature commit 2
| |
| * C feature commit 1
* | B master commit 2
|/
* A master commit 1
实际上,功能路径上的提交数量很大(100+),我想将它们全部压缩。
有没有办法只在保留功能分支上的提交时保留master
行上的提交?
答案 0 :(得分:3)
是的,你可以。因此,您希望将问题中的提交图转换为这个新图:
* E (HEAD) merging master into feature
|\
| * D feature commit (squashes 1 and 2)
* | B master commit 2
|/
* A master commit 1
程序:
git reset --hard *Hash of D on feature branch*
git reset --soft *Hash of A on master*
git commit
带有您想要的信息。git merge master
答案 1 :(得分:0)
问题只解决了所有提交都只存在于本地存储库中的情况,问题(除了我的评论)已得到解决。如果仅涉及区域设置git存储库,则等同于:
git checkout feature
git rebase -i
// mark all commits to be squashed
git merge master
但是您应该将母分支重置为E
才能发布您的更改:
git checkout master
git reset --hard feature
或(如果您真的更喜欢与平民主义者共事)git reset --hard *Hash of E*
。如果git reset
已被推送到远程存储库,我将检查是否使用C
。