基礎知識:多人使用一個Github倉庫

在公司進行項目開發,每一個項目組多人,每每會共用同一個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分支上提交

切換到master分支

  • 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,這樣,從分支歷史上就能夠看到分支信息。

使用No-ff的方式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

相關文章
相關標籤/搜索