我在Windows 10上使用SourceTree(版本1.9.13.7)作为Git的GUI。今天,当我尝试将功能分支重新绑定到master分支时。在某些重新定位的时候,在我看来,rebase已经完成了,因为我清楚地看到了特征分支的头部提交在SourceTree上用粗体圆圈突出显示。然后我设法切换到主分支。所以我开始将功能分支合并到master。然后我发生的事情是它开始再次变质。我当时并没有怀疑这一点,所以继续改变。完成之后,我意识到我在master和feature分支上只有最后3次提交。其余的提交都丢失了。
幸运的是,我可以进入功能分支并使用 git cherry-pick 从命令行提交范围以恢复所有丢失的提交。基本上它所做的就是检查原始提交并在功能分支上重新绑定它。
所以这给了我很大的教训。但我仍然对发生的许多事情感到困惑:
为什么git允许我在重新定位时切换到master分支?在我的情况下,可能是SourceTree UI没有正确更新的问题。这让我觉得变革已经完成了。所以我去切换到主人。但是为什么git首先允许这个呢?
如果我们被允许在变基期间切换分支,那么git是否应该将其视为“取消rebase”,以便功能分支应该返回到变基之前的状态?为什么它基本上只是摆脱我以前的所有提交。