Python 现代开发学习笔记

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"
}

笔记正文与全部题解 · Ctrl / ⌘ K