在公司進行項目開發,每一個項目組多人,每每會共用同一個Github倉庫地址。在合併分支的時候,有不少狀況是出錯的,沒法合併。git
分支簡介app
分支建立ide
快速合併分支spa
刪除分支3d
分支合併衝突指針
普通合併分支code
分支管理策略orm
團隊多人協做開發對象
推送分支blog
抓取分支
master分支並非一個特殊的分支,只是主分支的默認名字,在你進行git init
的時候,就會生成master這個名字,全部的記錄都會在隱藏的文件夾.git/
下
master的名字能夠修改。
建立分支執行如下命令:git branch newBranchName
,Enter.
建立的分支,是爲當前提交的對象上建立一個指針。
如圖,分支是當前提交對象的指針。Git是經過HEAD的指針,獲取當前的分支名字。HEAD是一個指向所在的本地分支。git branch
命令僅僅建立一個分支,並不會自動切換到新的分支去,指針並不會發生移動。
你可使用git log --online --decorate
來查看當前所致的對象
示例
git log --online --decorate
f30ab(HEAD,master,newBranchName)add xxxxxx...balabala...
balabala。。。
git checkout newBranchName
,這樣HEAD就指向newBranchName分支了
建立分支而且切換分支的命令的是:git checkout -b newBranchName
這樣有什麼優勢呢??
HEAD分支隨着新的提交的操做向時間線後移動,可是master分支卻沒有移動,仍然是上個版本的提交的對象。
如今咱們切換master分支看看:git checkout master
這個命令作了兩件事情
使得HEAD從新指向master分支
將目錄恢復成master分支所指向快照的內容
這就說明了,忽略了testing分支所作的修改,以便向另外一個方向進行開發。
可使用git branch
,查看當前分支,帶 *
的是當前分支。
在切換分支的時候,必定要注意開發者開發目錄的文件會發生改變,若是是切換到一個較舊的分支,工做目錄會恢復到該目錄最後提交的樣子。
若是咱們在testing分支完成工做了,怎麼講testing分支的開發內容合併到maser上面呢? 由於指針的存在,就直接把master指向test當前的提交。就完成了合併。這裏須要git merge
命令
git merge testing
命令用於合併指定分支
到當前分支
,合併後,在查看內容。至此完成合並。
合併完成分支以後,就可刪除。
使用命令進行操做git branch -d testing
在合併分支的時候,會出現內容衝突,合併出錯不成功的現象。
建立並使用新的分支進行開發:git checkout -b dev
修改README.md文件的內容,在dev
分支上提交
git checkout master
Switch to branch master
Your branch is up-to-date with origin/master
Git會自動提示咱們當前master分支比遠程分支要超前1個提交,在master分支上把README.md文件的最後要修改,提交。 如今,master分支和dev分支都分別有新的提交,變成了這樣。
這樣狀況下,Git沒法進行快速合併,只能把各自修改的合併起來。可是這種合併可能會有衝突。
git merge dev
,回車。 若是文件衝突,會報錯,會提示:Automatic merge failed;fix conficts and then commit the result
衝突之後必需要手動解決衝突後再提交。使用git status
命令
Git用<<<<<<< , ======= ,>>>>>>>
標記不一樣分支的內容,咱們修改後保存提交。這樣,master和dev的分支以下:
合併分支的時候,Git可能會用Fast forward 模式,可是這種的模式下,刪除分支後,會丟掉分支信息。
若是要強制禁用Fast forward模式,Git就會在merge是生成一個新的commit,這樣,從分支歷史上就能夠看到分支信息。
git merge
首先,建立並切換分支:git checkout -n dev
修改提交的文件,並從新提交
切換回master,git checkout master
,流程圖以下:
準備合併分支的時候,請注意參數--no-ff
參數,表示禁用Fasr forword
git merge --no-ff -m "merge with no-ff"
合併後,用如下語句查看分支歷史
git log --graph --pretty=online --abbrev-commit
不使用Fast forward模式,merge就像是這樣:
公司開發通常須要三個分支:
master
主分支用來發布
dev
平常開發
bug
用來修改bug用的分支
推送到其餘分支:git push origin dev
通常多人協做的模式通常是這樣
首選,能夠嘗試用git push origin branch-name
推送本身修改。
若是推送失敗,則由於遠程分支比你本地更新,須要你先用git pull 嘗試合併。
若是合併有衝突,則解決衝突,並在本地提交。
若是沒有衝突或者解決掉衝突之後,,在用git push origin branch-name
推送。
若是git pull 提示no tracking information
,則說明本地分支和遠程分支的鏈接沒有建立。
git branch
查看當前分支
git branch -v
查看每一個分支的最後一次提交。
git branch -a
查看本地和遠程分支狀況
git branch --merged
查看已經與當前分支合併的分支
git branch --no-merged
查看已經與當前分支未合併的分支
git branch -r
查看遠程分支
git branch dev
建立dev分支
git checkout dev
切換到dev分支
git checkout -b dev
建立並切換分支
git merge dev
名稱爲dev的分支與當前分支合併
git branch -d dev
刪除分支dev