07-01 两份克隆的分叉实验
题目
两边分别提交,先后推送,保留一次推送被拒绝的输出;Fetch 后画出两边位置,合并并再次推送,确认第二份克隆可以取得双方内容。
推导与做法
两个克隆从同一个提交分开:first 推送 A,second 在旧位置提交 B,直接推送会被拒绝。Fetch 只更新 second 的 origin/main,不会把本地 B 删除。
合并后产生同时以 A、B 为父提交的新提交,再推送。first 通过 fast-forward 取得合并结果,两个文件都在。代码在临时 bare 远程中复现实验,保存实际拒绝状态和提交图。
过程图
%% 每个节点保留输入、执行位置或执行后的实际状态。
flowchart TD
S0["共同提交 O"]
S1["first:O→A,远程到A;second:O→B"]
S0 --> S1
S2["second 推送被拒,Fetch 得到A"]
S1 --> S2
S3["合并 A、B 得到M,再推送M"]
S2 --> S3
classDef default fill:#EEF0FB,stroke:#4657B5,color:#24324A
linkStyle default stroke:#4657B5
实现与运行
查看带注释实现。本题与相关处理函数放在同一章节代码文件中;启动工具负责定位相邻项目和选择题号。
在 学习索引/参考实现/代码 中运行。
# 使用项目解释器运行本题,题号决定执行哪一组演示。
python "ch07.py" 07-01
程序按题号输出处理后的值、查询结果或状态。先和前面的手算比较,再修改一项输入重跑。
查看本题运行结果
# 与上面的手算状态和题目数值逐项比较。
{
"rejected": 1,
"both_files": [
"first",
"second"
],
"history": "* 68ec0f0 Merge remote-tracking branch 'origin/main'\n|\\ \n| * 1f4388a first change\n* | 3a3b8c2 second change\n|/ \n* 19efc65 initial\n"
}