Git实战

写在前面

这个学期计算机网络和操作系统的 project 对 git 的使用频率很高,多人协作涌现出大量实战需求,以此文章做简单记录。

实战1

背景:pintos 的 proj4 和 proj3 都是是基于 proj2 的分支上进行开发,main 分支作为测试的分支。 当前 main 的 HEAD 与 proj3 的 HEAD 一致。

需求: 需要将 proj4 的内容『转移』到 main 分支上

尝试:为什么要用『转移』这个词,起初的思考是 main 作为一个『测试』分支, 应该与任意 proj[i] 保持一致。步骤如下:

1
2
3
1. git checkout main 
2. git reset --hard proj4 /* 完全替换 main 分支的内容 */
3. git push origin main -f /* 强制推送到远程 */
很可惜,远端不允许强制推送,遂放弃。

解决:接步骤 2. 此时插件提醒我有 59 pull, 31 push. 59 pull 是远端proj3的存档, 31 push 是 proj4 的更改。于是需要先 pull, 解决冲突后,合并后总计 32 push.

实战2

背景:合并后才发现,有地方没和好,比如 doc/userprog.md 在 proj4 的分支上已删除

需求:将 doc/userprog.md 恢复

步骤: 1. 找到 doc/userprog.md 的修改记录的 hash。

1
2
git log -- doc/userprog.md /*查找修改该文件的commit*/
git log -p -- doc/userprog.md /*查看修改的内容*/
2. cherry pick
1
git cherry-pick [对应的hash]