合并后压缩Git提交
我有一个功能分支,它有几个提交(见下文)。自分支以来,也向master添加了一些提交 因此,我将合并后压缩Git提交,git,branching-and-merging,git-rewrite-history,Git,Branching And Merging,Git Rewrite History,我有一个功能分支,它有几个提交(见下文)。自分支以来,也向master添加了一些提交 因此,我将master合并到feature分支中 git checkout feature git merge master 这将导致功能分支上出现以下日志历史记录: * E (HEAD) merging master into feature |\ | * D feature commit 2 | | | * C feature commit 1 * | B master commit 2 |/
master
合并到feature
分支中
git checkout feature
git merge master
这将导致功能
分支上出现以下日志历史记录:
* E (HEAD) merging master into feature
|\
| * D feature commit 2
| |
| * C feature commit 1
* | B master commit 2
|/
* A master commit 1
实际上,功能路径上的提交数量很大(100+),我想将它们全部压缩
是否有一种方法可以仅挤压功能分支上的提交,同时保留
主行上的提交?可以。因此,您希望将问题中的提交图转换为以下新图:
* E (HEAD) merging master into feature
|\
| * D feature commit (squashes 1 and 2)
* | B master commit 2
|/
* A master commit 1
程序如下:
确保你的工作树是干净的。没有未提交的更改,没有暂存的更改,没有未跟踪的文件
确保您位于功能分支上
git reset——功能分支上D的硬*散列*
git reset——主机上的软*散列*
git提交
您想要的消息
git合并主机
如果问题只涉及所有提交都只存在于本地存储库中的情况,那么问题(除了我的问题)就解决了。如果只涉及区域设置git存储库,则有权:
git checkout feature
git rebase -i
// mark all commits to be squashed
git merge master
但您应该将masterbranch重置为E
,以便发布您的更改:
git checkout master
git reset --hard feature
或者(如果你真的更喜欢与comitish合作)git reset——E*的硬*散列
。如果C
已被推送到远程存储库,我将检查git reset
的使用是否有效。您仍然希望结果在功能分支上有一次提交并与master合并,还是希望所有工作都在master上应用而不进行分支?我认为是第一次(如果我理解正确的话)。基本上,在上面的图中,C和D应该被压缩成一个提交,并且从master
(A,B)拉入的提交应该被保留。这样我就可以从这个分支将C->D->E直接合并到master
。再次感谢!另一个问题-您在功能分支上的历史记录是完全线性的,还是有传入或传出的合并?不要忘记在之后进行更改#4@CodyStott软重置已经暗示了登台,尽管这很好,但我以前从未使用过soft
选项。很高兴知道。在#6之后,仍然缺少“B”和“E”之间的链接,分支主节点仍然在“B”上。要做到这一点,请使用类似于git checkout master
和git reset--hard-feature