先比较快进场景
当 main 仍是 feature 的祖先时,merge 只移动 main 指针,不创建合并提交;分叉场景才会出现两个父节点。
Git / 版本控制
选择内置示例与操作,预览提交历史会如何变化;页面不会连接你的仓库。
A–D 和带撇号的节点是教学 ID,不是真实 Git 哈希。
选好示例并预览操作,结果会出现在这里。
固定教学图只在浏览器内处理,不读取或连接真实仓库。
目标分支: main · 来源分支: feature
按 Ctrl/Cmd + Enter 预览所选操作。
选择操作后预览结果。
图只模拟固定单行文件,不代表真实仓库或 Git 合并策略。
分支从同一个提交分开后,直接读命令很难想象指针会走到哪里。Git 在线模拟器先给出 main 和 feature 的固定示例,让你看到合并、变基、摘取单个提交各自留下的图。
可以换成快进或同一行冲突的示例,再对照命令草稿理解差别。这里的 C、D 只是教学节点,不是你仓库里的提交 ID;真实操作前仍要检查工作区和共享分支。
Git 在线模拟器把 Git 提交图中的原节点和新节点分开标注。你可以比较 Git 合并保留双亲、Git 变基重放提交,以及 cherry-pick 只摘取一项时分支指针如何变化。
冲突示例把 app.js 同一行的基线、main 版本和 feature 版本并排显示。这解释了本示例为何停下,却不能把固定快照当作真实仓库的冲突预测。
当 main 仍是 feature 的祖先时,merge 只移动 main 指针,不创建合并提交;分叉场景才会出现两个父节点。
rebase 会把 C、D 依次复制为 C′、D′,feature 改指向新链;cherry-pick 只复制选中的 C 或 D,原 feature 不动。
修改场景或操作后,旧结果立即过期,复制和下载会禁用。按 Ctrl/Cmd + Enter 可重新预览;草稿中的分支名与提交占位符都要在真实仓库核对。
Git 可视化学习不该把所有 merge 都画成一个新节点。这个示例在分叉时新增双亲提交,在快进时只移动指针,原有提交均不改写。
对比图用撇号标出重放后的提交:变基复制 feature 序列,摘取只复制所选提交。符号 ID 说明拓扑变化,不冒充真实哈希。
内置同一行示例会显示哪个文件让操作停下;默认分叉示例不推断是否会冲突。页面没有文件合并器,也不会自动选择哪边的代码。
merge 保留两条分支的原提交,分叉时通常新增双亲节点;rebase 在新基底上重放 feature 提交,产生新的节点。Git 在线模拟器同时画出两种结果,但不替团队决定应使用哪一种。
自己的未共享分支需要整理为线性历史时,可以考虑 rebase;已共享的历史改写会影响其他人,通常先沟通。这里能看指针与提交形状,无法确认你仓库是否适合改写。
先确认工作区状态和分支是否共享,再留意逐个提交重放时可能停在冲突处。内置示例只展示固定文件快照,不会备份或恢复真实仓库。
cherry-pick 把一个选定提交的变化复制到当前分支;merge 整合两条分支的历史。选择 D 时,本页只复制 D 的测试文件,feature 原指针保持不变。
提交对象包含父提交等信息;重放到新的父节点后会生成新对象,因此 ID 改变。页面用 C′、D′ 表示这个关系,不计算真实 SHA。
生成结果与设备文档不一致?