我有一个看起来像这样的主题分支。(分支主题当前指向'a0a0')
如何将 a0-f5 变成单个合并提交?
我试过:git rebase -i f5f5打算将它告诉那squash5 个提交,但它只是在 f5f5 和 a0a0 之间的主分支上提供了每个提交。因此,我将除第一个和最后一个之外的所有内容从pick变为squash,但是这太疯狂了,并且将 master 的每个提交重新定位为一个巨大的提交,以代替所有合并,从而失去了它是“合并”的事实。那不是我所期望的!
我可以:
$ git reset 6666
$ git merge Master
Run Code Online (Sandbox Code Playgroud)
但这需要我重新做任何合并提交。
那么我如何将这些不同的合并压缩成一个合并提交,知道这是一个合并,并且还保留所有合并冲突的东西?
这将做到:
git reset --hard $(git commit-tree -p f5f5 -p Master -m "Merge hurricane" a0a0:)
Run Code Online (Sandbox Code Playgroud)
要了解它是如何工作的,首先要记住合并提交绝对没有什么神奇之处。可能很难创建,但是一旦创建,就很容易准确地重新创建。这是因为 git 不记录变更集,它记录整个树。像git show将提交显示为差异和合并提交作为非常花哨的差异之类的工具,但实际上提交是指向成熟树的指针。压缩一些提交是一个简单的事情,重新创建一个包含相同树的新提交,给它一个不同的父级和提交消息。
管道命令git commit-tree完成最后一部分。给定父提交 ( f5f5)、提交消息和树 ID(很容易用 引用COMMIT:),它会创建一个包含指定树的新提交。如果提交只有一个父级,则它将是常规提交。如果它有多个父级,它将是一个合并提交。创建压缩的合并提交后,剩下的就是将当前分支指向新的提交git reset --hard。
| 归档时间: |
|
| 查看次数: |
580 次 |
| 最近记录: |