Python 现代开发学习笔记

(八)合并冲突的比较与解决

1. 两边改动同一句说明

接着在 docs/personal 分支把 README 的用途改成“个人阅读统计”,main 则改成“每日阅读统计”,并分别提交。这次改的是同一位置:

# 从当前 main 开始新分支,在 README 改为“项目用途:个人阅读统计。”。
git switch -c docs/personal
git add -- README.md
git commit -m "说明个人阅读用途"
git switch main
# 在 README 同一行改为“项目用途:每日阅读统计。”后保存。
git add -- README.md
git commit -m "说明每日阅读用途"
git merge docs/personal
git status --short

Git 停下,README 中出现冲突标记,状态通常是 UU README.md:

<<<<<<< HEAD
项目用途:每日阅读统计。
=======
项目用途:个人阅读统计。
>>>>>>> docs/personal

本次操作中 HEAD 一边是当前 main,另一边是要合入的 docs/personal。Git 找到了两个不同的新内容,但不知道项目应该采用哪一种表述。

# 查看共同版本、当前分支版本和待合入版本,1/2/3 是冲突索引的三个阶段。
git show :1:README.md
git show :2:README.md
git show :3:README.md

共同版本写“阅读练习”;两边分别增加了“个人”和“每日”。这次想保留两项信息,最终写成 项目用途:个人每日阅读统计。,删除三种冲突标记。接着:

# 保存最终文字后,暂存表示这份路径已经解决。
git add -- README.md
git diff --cached
python check_reading.py
git commit -m "合并个人与每日阅读用途说明"
git status
共同版本、两边修改、冲突标记和人工组合后的最终结果

git add 不会替我们判断句子或代码是否正确,它把当前保存的文件作为解决结果。若决定暂时取消这次合并,git merge --abort 会结束进行中的合并并尝试回到合并前;本例从干净工作目录开始,因此回到两次独立提交仍未合并的状态。已经手动编辑的解决结果要保留时,先另存再取消。merge 的冲突与取消

2. 按动作理解当前与传入版本

这里是“main 合并功能分支”,所以当前版本是 main。后面进行 rebase 时,当前一侧会是新基线及已经重放的提交,传入一侧是正在重放的功能提交。先读实际内容和操作名称,再决定采用哪一项;不要单凭“当前”“传入”想象作者是谁。

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