git上传分支的原理_几张图让你彻底弄懂git工作流(二) ——git分支
上篇文章已經說了Git簡史以及Git基礎,那么這篇文章簡單總結下Git分支
Git分支
為了理解 Git 分支的實現方式,我們需要回顧一下,
Git保存的不是文件差異或者變化量,而只是一系列文件快照.Git分支分支其實就是從某個提交對象往回看的歷史文字描述
imageGit中的分支,本質上就是個指向master對象的可變指針,master為默認分支,每次提交都會向前移動多個分支指向提交數據的歷史文字描述
imageGit創建一個新分支指針從而創建分支,創建testing命令git branch testingHEAD 指向當前所在的分支文字描述
imageGit因為保存一個名為HEAD的指針,它指向正在工作中本地分支指針
git branch僅是創建新分支,但不會自動切換分支中去(如圖還在master上)HEAD 在你轉換分支時指向新的分支文字描述
image運行git checkout testingHEAD就指向testing分支了每次提交后 HEAD 隨著分支一起向前移動文字描述
image左圖是又提交一次的結果,每次提交后HEAD隨著分支一起向前移動
但master仍指向原來git checkout時所在的commit對象。再次執行git checkout masterHEAD才會指向master
Git—merge分支的合并 — merge #1文字描述
image1. #53是第一滴修補問題的分支
git chackout -b iss53 === git branch iss53+git checkout iss53
2.假如接到緊急任務,這時候就不必花費大力氣來復原這些修改,執行git checkout master創建緊急修補分支git checkout -b hotfix
3.hotfix分支是從master分支所在點分化出來的
image1.測試成功后回到master把它合并起來,然后發布服務器,命令為git checkout master git merge hotfix 合并會出現“Fast forward”的提示
2.因為是master并入hotfix的直接上游,只需master指針右移動(順著走)稱為快進
3.合并之后,master 分支和 hotfix 分支指向同一位置分支的合并 — merge #2文字描述
image1.現在回來處理iss53,完成后合并回master,不同于hotfix,開發歷史從早的地方開始分叉的
2.master->c4,git額外處理為找到共同祖先C2簡單三方合并
image三方合并后的結果重新快照,并自動創建指向它的提交對象C6,可以看到C6有兩個祖先
(git自動創建了一個包含了合并結果的提交對象,自己裁決哪個共同祖先才是最佳合并基礎,這和 CVS及Subversion(1.5 以后的版本不同)
Git—rebase分支的合并 — rebase #1文字描述
image把一個分支中的修改整合到另一個分支的辦法有兩種:merge 和 rebase(衍合)
如左圖:分叉到兩個不同分支,又各自提交了更新
image除了merge兩個分支最新的公共祖先三方合并
另外就是C3的變化補丁在C4中重新打一遍->衍合
有了衍合可以把分支中提交的變化移到另一個分支重放一遍
(原理:回到共同祖先,根據當前分支(ex··)提交的對象C3,生成補丁然后以master最后提交的C4為新的出發點,逐個應用之前準備好的補丁文件,最后會生成一個新的合并提交對象(C3'),master成直接下游)
image回到master進行快進合并分支的合并 — rebase #2文字描述
image從一個特性分支里再分出一個特性分支的歷史
服務器端代碼添加功能創建server提C3C4->從C3增加client分支并提C8C9->回server提C10
image將特性分支上的另一個特性分支衍合到其他分支
一次軟件發布中,我們決定先把客戶端的修改并到主線中,而暫緩并入服務端軟件的修改
git rebase --onto master server client
取出 client 分支,找出 client 分支和 server 分支的共同祖先之后的變化,然后把它們在 master 上重演一遍
image快進 master 分支,使之包含 client 分支的變化
git checkout master
git merge client
image在 master 分支上衍合 server 分支
git rebase [主分支] [特性分支] 命令會先取出特性分支 server,然后在主分支 master 上重演
git rebase master server
image最終的提交歷史
快進主干分支 master
git checkout master && git merge server
現在 client 和 server 分支的變化都已經集成到主干分支來了,可以刪掉它們了
git branch -d client
git branch -d serverGit—rebase風險分支的合并 — rebase的風險文字描述把衍合當成一種在推送之前清理提交歷史的手段,而且僅僅衍合那些尚未公開的提交對象,就沒問題。如果衍合那些已經公開的提交對象,并且已經有人基于這些提交對象開展了后續開發工作的話,就會出現叫人沮喪的麻煩
Git分支—遠端同步git分支 — 和遠端同步文字描述
image如左圖箭頭中命名所示即可與遠端同步
作者:Li_小點
鏈接:https://www.jianshu.com/p/ca76937b174f
總結
以上是生活随笔為你收集整理的git上传分支的原理_几张图让你彻底弄懂git工作流(二) ——git分支的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 一个控制器怎么转发到另外一个控制器_楼宇
- 下一篇: python 日历查询系统_python