Lab 4: git 冲突的创建

实验文档:https://sp21.datastructur.es/materials/lab/lab4/lab4
skeleton:https://github.com/Berkeley-CS61B/skeleton-sp21

由于今年是 2025 年,CS61B sp21 的 skeleton 仓库早已不再更新。也就是说,所有 lab/project 的 starter code 你从开始学的第一天起就都拿到了,所以我们无论如何 git pull skeleton master 都不会为我们制造冲突了。这时候我们只能手动创造冲突。

此时我已完成 lab3,早已完成对 lab1 的 Collatz.java 的修复。

但此时为了创造冲突,我们需要创建一个“skeleton”分支来模拟 git pull skeleton master 为我们带来的冲突。

之前我们自始至终都在 master 分支上:

我们此时创建一个“skeleton”分支:

接着把最初写 lab1 时 skeleton-sp21 里面有 bug 的 nextNumber 方法替换掉现有的 nextNumber 方法并 commit:

commit a bug for lab4

接着我们回到 master 分支,重复一次上面的操作,但要修改一处的值,保证 merge 的时候会发生冲突:

commit a conflict

此时分支情况是这样的:

这时我们再尝试 merge:

冲突如我们所愿发生了

两个 bug 版本发生了冲突

此时我们需要回到文件中手动合并存在冲突的文件,并 commit。注意 lab4 要求我们暂时保留 bug 版本的 Collatz.java,所以先不要急着修:

fixed the merge conflict in lab4

现在我们就可以 push 到我们的远程仓库并提交到 gradescope 的 Lab 4A: Git Exercise Part A 了:

很好!看来一切顺利。接下来按照实验文档的要求完成就可以了。

剩下的步骤就是教你用 git checkout <commit-hash> 查看一下之前提交 lab1 时正确的版本,再 git checkout master 回到现在有 bug 的版本,再 git checkout <commit-hash> <file> 将 Collatz.java 单独回退到正确的版本并提交。

注意使用 git checkout <commit-hash> 命令后你处于分离头指针(detached HEAD)状态,你可以任意查看任何历史版本,但不要做任何修改,因为修改不会得到保留,除非你创建一个新的分支,或者用 git stash 暂存起来。

git push 之后我们就可以提交 Lab 4B: Git Exercise Part B 了。