前两天使用github开发遇到一个问题,解决过程中加深了对git的理解,在这里记录一下。
问题描述
项目组有一个开源项目A,大家都fork了一份A'到自己的github。开发测试后提交pull request,合并到master后上线。一切都很正常。
但由于会同时跟进多个功能点,需要改多个文件M,N,并在开发完分开提交,就选用了分支开发(branch)的方法。
在A’主干修改的M文件,代码提交了pr,但因为依赖未上线,一直处于未合并未上线状态。
此时需要修改功能N,就在A'的基础上新建分支functionN
,开发后提交时发现,竟然有M的代码。无论怎么同步A的代码都不能提交。
解决思路
这个问题其实是创建functionN
分支的时机不对引起的,这个分支创建于M文件合并之后,带有M的代码。只要在那之前的时间轴节点创建分支就可以解决问题了。
具体实现
注意:在操作前备份需要修改的代码。
# 1.删除分支
git branch -d functionN
# 2. 回到主干
git checkout master
# 3. 找到M文件合并前的文件节点,如commit 488b192d543729fcfb4070ff5e
git log
# 4. 将文件内容同步为过去的版本
git checkout 488b192d543729fcfb4070ff5e
# 5. 创建工作分支
git branch functionN
# 6. 切换到工作分支,开始写代码
git checkout functionN
反思
遇到这个问题,其实是自己对git工作流(workflow)不够了解。导致创建functionN
分支时带有M的代码。归纳本次的git工作流如下图:
网友评论