同一Git分支为何需合并?SourceTree与TortoiseGit协作疑问
为什么单master分支下会出现多分支标识和合并操作?
别慌,这种情况其实挺常见的,主要是不同GUI工具的可视化逻辑、以及TortoiseGit的默认操作习惯导致的,我给你拆解几个核心原因:
1. GUI工具对分支的可视化差异
SourceTree和TortoiseGit在绘制提交图时,对“分支”的判定逻辑有区别:
- SourceTree有时候会把线性提交里的不同提交者、或提交间隔较长的提交,用不同的“分支线”展示,但本质上这些提交仍属于master分支,只是可视化方式让你误以为是多个独立分支。
- TortoiseGit也可能把本地临时引用(比如reflog里的记录)短暂显示成分支标识,这些并不是真正的独立分支。
2. 本地与远程master的合并操作
你的同事大概率是这么操作的:
- 他先在本地master提交了内容,此时本地master和远程master已经出现分叉(因为你也往远程提交了内容)。
- 拉取远程代码时,TortoiseGit默认用了merge模式而非rebase模式,Git会自动生成一个合并提交,把远程的内容合并到本地master里。
- 这种合并是在同一个分支的本地版本和远程版本之间发生的,并非两个独立分支,但Git确实会生成合并提交,GUI工具会把这个过程画成分叉再合并的样子,看起来就像有多个分支。
3. 误创建临时分支后合并删除
TortoiseGit的操作界面比较直观,可能同事不小心创建了临时分支,提交后又合并回master,随后删掉了这个临时分支。但Git的提交历史会保留合并痕迹,SourceTree也会显示这个曾经存在过的分支的提交线,哪怕分支已被删除。
补充:Git合并的本质
其实Git的合并并不一定需要两个“命名分支”——只要是两个有共同祖先的提交历史,都可以合并。比如本地master和远程master本质是两个不同的提交指针,指向不同的提交,拉取合并就是把这两个指针的历史合并到一起,生成合并提交。官方文档里说的“两个分支”是最常见场景,但不是唯一场景哦。
内容的提问来源于stack exchange,提问作者KayWang
相关产品推荐
相关产品推荐

