一、分支工作原理
在本地倉庫操作中我們知道,其實git操作的不是檔案本身,而是利用head指標操作檔案的修改刪除等變化,每次修改形成了相當於一條時間線,如下圖:master是乙個主分支,而head指向的是當前的分支,嚴格來說不是指向提交,因為當前分支是master,所以head指向的是master,當我們要實現乙個建立乙個分支dev,然後在分支上修改檔案,修改完後合併分支,相當於,建立了乙個分支,就把head指向當前分支dev上,合併後刪除當前head的指向,head重新指向master。
多人合作開發圖(master分支一般比較穩定,不在上面進行開發,從主分支中新建乙個開發分支dev,每個人從dev分支複製**,進行開發,開發後提交到dev分支,發布版本後再提交到master分支):
二、操作分支命令
乙個在分支上基本的操作流程就是:建立並切換分支----修改**-----提交**(新增到暫存區並提交)---切換到主分支,並合併分支-----刪除分支,只留主分支,
檢視分支:git branch
建立分支:git branch
切換分支:git checkout 或者 git switch
建立+切換分支:git checkout -b 或者 git switch -c
合併某乙個分支到當前分支(fast forward模式,不存在分支記錄):git merge
合併某乙個分支到當前分支(禁用fast forward模式,普通模式合併,合併後的歷史有分支,能看出來曾經做過合併):git merge --no-ff -m "普通模式合併分支"
檢視分支歷史:git log
刪除分支:git branch -d
建立bug分支修復bug:
儲存工作現場:git stash
檢視工作現場:git stash list
恢復工作現場方式2(同時也移除stash內容):git stash pop
在master分支上修復的bug,想要合併到當前dev分支,可以用git cherry-pick
命令,把bug提交的修改「複製」到當前分支,避免重複勞動。commit為commit id
當我們需要新增乙個功能時,最好新建乙個分支,如果要丟棄乙個沒有被合併過的分支,可以通過git branch -d
強行刪除。
三、解決衝突
當我們在主分支和自己的分支分別在同乙個地方修改了**,並提交,且修改的不一樣時,合併分支時就會出現衝突,合併不成功,我們需要手動把這兩處修改達成一致,重新提交,才能合併分支成功。
四、標籤
標籤相當於commit的id,只是用標籤比起一大串的commit id便於查詢,標籤和commit掛鉤,哪個分支有commit,這個分支就有這個標籤
建立標籤:git tag v1.0
檢視所有標籤:git tag
對已經commit的分支打標籤(之前忘記打標籤):git tag v0.9 wef1949fwefwe (後面一大串為commit id ,用git log 檢視歷史資訊)
建立帶有說明的標籤:git tag -a v1.0 -m "建立帶說明標籤" wef1949fwefwe (為wef1949fwefwe這個commit建立乙個v1.0帶說明的標籤)
檢視說明文字:git show v1.0
git學習筆記 分支管理
分支就是科幻電影裡面的平行宇宙,當你正在電腦前努力學習git的時候,另乙個你正在另乙個平行宇宙裡努力學習svn。如果兩個平行宇宙互不干擾,那對現在的你也沒啥影響。不過,在某個時間點,兩個平行宇宙合併了,結果,你既學會了git又學會了svn!分支在實際中有什麼用呢?假設你準備開發乙個新功能,但是需要兩...
git學習 分支管理
嚴格的來說head不是指向提交,而是指向master,master才是指向分支的,所以head指向的就是當前的分支。每當我們commit一次的時候提交就會向前走一步,git把這些提交串成一條時間線,這個時間線就是乙個分支。分支的作用 舉個例子,假如當前有乙個檔案readme.txt,我們新建立了乙個...
git學習 分支管理
詳情見 git checkout命令加上 b引數表示建立並切換,相當於以下兩條命令 git branch dev git checkout devgit branch 檢視當前分支 在dev分支上建立的檔案 工作區 以及提交到暫存區和檔案庫 再master分支上是看不到的 使用git merge d...