前兩天使用github開發(fā)遇到一個問題跷车,解決過程中加深了對git的理解棘利,在這里記錄一下。
問題描述
項(xiàng)目組有一個開源項(xiàng)目A朽缴,大家都fork了一份A'到自己的github善玫。開發(fā)測試后提交pull request,合并到master后上線密强。一切都很正常茅郎。
但由于會同時跟進(jìn)多個功能點(diǎn),需要改多個文件M,N或渤,并在開發(fā)完分開提交系冗,就選用了分支開發(fā)(branch)的方法。
在A’主干修改的M文件薪鹦,代碼提交了pr掌敬,但因?yàn)橐蕾囄瓷暇€,一直處于未合并未上線狀態(tài)池磁。
此時需要修改功能N奔害,就在A'的基礎(chǔ)上新建分支functionN
,開發(fā)后提交時發(fā)現(xiàn)地熄,竟然有M的代碼华临。無論怎么同步A的代碼都不能提交。
解決思路
這個問題其實(shí)是創(chuàng)建functionN
分支的時機(jī)不對引起的端考,這個分支創(chuàng)建于M文件合并之后雅潭,帶有M的代碼揭厚。只要在那之前的時間軸節(jié)點(diǎn)創(chuàng)建分支就可以解決問題了。
具體實(shí)現(xiàn)
注意:在操作前備份需要修改的代碼寻馏。
# 1.刪除分支
git branch -d functionN
# 2. 回到主干
git checkout master
# 3. 找到M文件合并前的文件節(jié)點(diǎn)棋弥,如commit 488b192d543729fcfb4070ff5e
git log
# 4. 將文件內(nèi)容同步為過去的版本
git checkout 488b192d543729fcfb4070ff5e
# 5. 創(chuàng)建工作分支
git branch functionN
# 6. 切換到工作分支核偿,開始寫代碼
git checkout functionN
反思
遇到這個問題诚欠,其實(shí)是自己對git工作流(workflow)不夠了解。導(dǎo)致創(chuàng)建functionN
分支時帶有M的代碼漾岳。歸納本次的git工作流如下圖:
git workflow.png