Git / 版本控制

Git 在线模拟器先看懂提交图,再核对命令

选择内置示例与操作,预览提交历史会如何变化;页面不会连接你的仓库。

Git 在线模拟器

示例提交图

AA: 共同起点BB: main 更新mainCC: 功能改动DD: 功能测试feature

A–D 和带撇号的节点是教学 ID,不是真实 Git 哈希。

历史预览

选好示例并预览操作,结果会出现在这里。

固定教学图只在浏览器内处理,不读取或连接真实仓库。

选项

目标分支: main · 来源分支: feature

按 Ctrl/Cmd + Enter 预览所选操作。

选择操作后预览结果。

图只模拟固定单行文件,不代表真实仓库或 Git 合并策略。

分支从同一个提交分开后,直接读命令很难想象指针会走到哪里。Git 在线模拟器先给出 main 和 feature 的固定示例,让你看到合并、变基、摘取单个提交各自留下的图。

可以换成快进或同一行冲突的示例,再对照命令草稿理解差别。这里的 C、D 只是教学节点,不是你仓库里的提交 ID;真实操作前仍要检查工作区和共享分支。

为什么使用 Git 在线模拟器?

同一张图看三种历史

Git 在线模拟器把 Git 提交图中的原节点和新节点分开标注。你可以比较 Git 合并保留双亲、Git 变基重放提交,以及 cherry-pick 只摘取一项时分支指针如何变化。

一条主分支和一条功能分支从共同节点分叉,合并后新增双亲节点,旧提交仍保留。

冲突说明有可核对的依据

冲突示例把 app.js 同一行的基线、main 版本和 feature 版本并排显示。这解释了本示例为何停下,却不能把固定快照当作真实仓库的冲突预测。

同一行文件在两条分支上被改成不同值,预览在冲突处停止并显示警示。

按三处线索读懂结果

01

先比较快进场景

当 main 仍是 feature 的祖先时,merge 只移动 main 指针,不创建合并提交;分叉场景才会出现两个父节点。

02

看清重放和单次摘取

rebase 会把 C、D 依次复制为 C′、D′,feature 改指向新链;cherry-pick 只复制选中的 C 或 D,原 feature 不动。

03

导出前重新预览

修改场景或操作后,旧结果立即过期,复制和下载会禁用。按 Ctrl/Cmd + Enter 可重新预览;草稿中的分支名与提交占位符都要在真实仓库核对。

提交、分支与冲突如何变化

合并区分快进与双亲

Git 可视化学习不该把所有 merge 都画成一个新节点。这个示例在分叉时新增双亲提交,在快进时只移动指针,原有提交均不改写。

变基与摘取产生新节点

对比图用撇号标出重放后的提交:变基复制 feature 序列,摘取只复制所选提交。符号 ID 说明拓扑变化,不冒充真实哈希。

固定快照解释冲突

内置同一行示例会显示哪个文件让操作停下;默认分叉示例不推断是否会冲突。页面没有文件合并器,也不会自动选择哪边的代码。

示例图的能力边界

不读取或执行真实仓库
页面不导入 Git log、目录或仓库 URL,也不执行命令。它无法检查工作区未提交的改动、远端权限或团队分支策略。
不保证生产操作安全
Git 在线模拟器展示的是教学图。示例 main、feature 和命令占位符并不对应你的真实引用;共享分支变基或合并前必须自己核对状态。
冲突只针对一行预置数据
本页只根据 app.js 的固定基线与两侧单行值解释一个冲突;真实 Git 的文本合并、重命名及策略选项不在模型内,也不代替你处理冲突和运行 --continue。
不解析任意命令
页面没有自由输入命令、push/pull、squash、stash 或交互式变基入口。任意 Git 历史操作需要更完整的仓库状态,不能由这张示例图可靠表示。

Git 在线模拟器常见问题

Git 的 merge 和 rebase 有什么不同?

merge 保留两条分支的原提交,分叉时通常新增双亲节点;rebase 在新基底上重放 feature 提交,产生新的节点。Git 在线模拟器同时画出两种结果,但不替团队决定应使用哪一种。

rebase 和 merge 有什么区别?什么时候使用 rebase?

自己的未共享分支需要整理为线性历史时,可以考虑 rebase;已共享的历史改写会影响其他人,通常先沟通。这里能看指针与提交形状,无法确认你仓库是否适合改写。

使用 rebase 的时候有什么注意事项?

先确认工作区状态和分支是否共享,再留意逐个提交重放时可能停在冲突处。内置示例只展示固定文件快照,不会备份或恢复真实仓库。

cherry-pick 和 merge 的区别是什么?

cherry-pick 把一个选定提交的变化复制到当前分支;merge 整合两条分支的历史。选择 D 时,本页只复制 D 的测试文件,feature 原指针保持不变。

Git rebase 为什么会改掉提交 ID?

提交对象包含父提交等信息;重放到新的父节点后会生成新对象,因此 ID 改变。页面用 C′、D′ 表示这个关系,不计算真实 SHA。

生成结果与设备文档不一致?

现在试用 Git 在线模拟器

先用同一张提交图比较三种结果,再看固定冲突如何停下;带走命令草稿前,请核对真实分支与提交。