首页 > 解决方案 > git interactive rebase squash 创建了全新的分支

问题描述

这是我简单直接历史的最后一部分的图片(来自 SourceTree,时间从底部到顶部):

在此处输入图像描述

因此,在这种情况下,我要求 SourceTree 对最底部提交(“Xcode 10.2,Swift 5”)的子项进行交互式变基,因为我想折叠接下来的两个提交(“该死,属性列表编码”和“ v1.1.1build24") 到单个提交中。没有遥控器,所以我可以自由地重写历史并保持它的清洁和信息量。

但是当我这样做时,从“Xcode 10.2,Swift 5”分支创建了一大堆新的提交——现有提交链的副本。我不明白为什么,我花了很多时间来清理它。

它不完全是一个新的“分支”(正如我的问题标题所言);但是通过“v1.1.2build28”的现有提交最终在他们自己的死胡同分支线上,master现在有这些新的提交,复制这些提交但没有标签和今天的日期。

我的问题是:为什么会发生这种情况,我应该怎么做?

标签: gitatlassian-sourcetreegit-interactive-rebase

解决方案


它按预期完成。

“该死,属性列表编码”和“v1.1.1build24”被压缩为一个提交。Git 通过创建一个新的提交来实现这个 squash,其父提交是“Xcode 10.2, Swift 5”,其更改等同于“darn,属性列表编码”和“v1.1.1build24”的更改。

“v1.1.1build25”的父或基是“v1.1.1build24”。现在一个新的提交已经取代了“v1.1.1build24”和“该死的,属性列表编码”。因此,“v1.1.1build25”的父级需要是新的提交。否则,“v1.1.1build24”之上的提交将不再存在于master. 为了将“v1.1.1build25”从旧库移动到新库,Git 还为“v1.1.1build25”生成了一个新提交,其父级现在是压缩提交,其更改等同于“v1” .1.1build25”。因此,所有其余的后代都被重新创建,因为它们的父母/基地发生了变化。

Git 创建新的提交,就好像旧的被替换了一样,但旧的仍然存在于存储库中,只是它们不再可以从master. 然而,像“v1.1.1build25”这样的标签和像“temp”这样的分支仍然指向旧的提交。由于这些旧提交现在不在当前master,因此这些标签和分支也看不到master


推荐阅读