git - git interactive rebase squash 创建了全新的分支
问题描述
这是我简单直接历史的最后一部分的图片(来自 SourceTree,时间从底部到顶部):
因此,在这种情况下,我要求 SourceTree 对最底部提交(“Xcode 10.2,Swift 5”)的子项进行交互式变基,因为我想折叠接下来的两个提交(“该死,属性列表编码”和“ v1.1.1build24") 到单个提交中。没有遥控器,所以我可以自由地重写历史并保持它的清洁和信息量。
但是当我这样做时,从“Xcode 10.2,Swift 5”分支创建了一大堆新的提交——现有提交链的副本。我不明白为什么,我花了很多时间来清理它。
它不完全是一个新的“分支”(正如我的问题标题所言);但是通过“v1.1.2build28”的现有提交最终在他们自己的死胡同分支线上,master
现在有这些新的提交,复制这些提交但没有标签和今天的日期。
我的问题是:为什么会发生这种情况,我应该怎么做?
解决方案
它按预期完成。
“该死,属性列表编码”和“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
。
推荐阅读
- google-sheets - 在 Google 表格中,如何计算添加的项目数量
- java - RS232 - JSSC 2.8.0 串行端口阅读器 - 不明确的阅读
- javascript - 将yaml字符串转换为nodejs模块中的函数引用(不调用函数)
- python - 从多个连续动作中选择 1 个动作
- wso2 - 更改 WSO2 API Manager v3.0.0 的 UI
- android - Xamarin:无法解析引用:`System.Web`,由 [引用项目] 引用
- php - PHP : mail() - 发送多个主题
- compiler-construction - 是否可以切换到另一个规则
- r - 分隔不一致的分隔名称
- python - 使用 lxml 查找隐藏元素