重新溫習了一下
git
,這篇文章主要總結一下使用
git
做開發的整體流程,是以不會做過多的
git
指令的詳細說明。
整體流程
這裡我在本地進行模拟,我希望模拟達到的效果是,一共有4個端。project是一個倉庫,manager是項目負責人、zs和ls是開發人員,他們3個都參與項目,都是項目貢獻者,分别在他們各自的電腦上進行開發,這是我本地的目錄結構:
| project // 路徑是 D:\桌面\project
| zs // 路徑是 D:\桌面\zs
| ls // 路徑是 D:\桌面\ls
| manager // 路徑是 D:\桌面\manager
首先manager建立這個項目,建立了一個project檔案夾,然後使用
git init --bare
,建立一個裸倉庫。然後manager傳回自己的電腦(也就是上面提到的manager目錄),執行
git clone D:\桌面\project
,然後manager建立
README.md
檔案,簡單初始完畢master分支之後執行。
git add README.md
git commit -m '初始化項目,添加README檔案'
git push
// 上面這兩句就是簡單初始化一個master分支然後push上去
git branch dev
git switch dev
// 上面這兩句就是基與master分支建立dev分支,然後manager切換到dev去初始化項目架構啥的
manager在dev分支建立好架構之後告訴zs和ls,我項目初始化完畢了,你們拉取代碼開發。這個時候zs和ls應該基與dev分支建立屬于自己的分支。比如說zs這個人進入到自己的電腦(也就是上面提到的zs目錄),進行一下的操作:
git clone D:\桌面\project // 這個時候預設本地隻有master分支
git switch dev // 這句指令是切換到dev分支,因為本地沒有dev分支,是以會看遠端有沒有,如果有,就會建立本地dev分支,并且拉取遠端dev分支内容
git brnach zs // 這個時候是在dev分支建立的zs分支
git switch zs // 切換到zs這個分支,進行對應的代碼開發
zs代碼如果開發完畢了就可以執行
ls這個人也會和zs有着相同的操作,就不贅述了。
如果zs和ls都開發完畢了。manager就可以把zs和ls分支的代碼合并到dev了,manager再次進入到他的電腦,執行一下操作:
git switch zs // 切換到zs分支
git pull // 拉取zs分支的代碼
git switch dev // 切換到dev分支
git merge zs // 那zs的代碼合并到dev分支
git switch ls // 切換到ls分支
git pull // 拉取ls分支的代碼
git switch dev // 切換到dev分支
git merge ls // 那ls的代碼合并到dev分支
基本這樣就ok了,然後進行測試,測試的話可能會有bug,bug修複的話,可以基與dev分支建立bugfix分支,然後再用dev分支去合并bugfix分支,bug修複完畢之後,切換進入master分支,基本master分支合并dev分支,master分支的代碼就是線上環境的代碼了。然後可以再master上打
tag
,相當于是一個裡程碑:
git tag -a v0.1.0 -m '第一個版本' // 打标簽
git tag // 檢視标記
git push origin 'v1.0' // 把tag推送到遠端伺服器
當然可能還有一些其他的場景。
場景一
zs這個時候正在在他自己的分支上開發,但是manager告訴在dev分支上有一個bug,很緊急,必須停下手上現有的活去修複bug。這個時候你可能會想,很簡單嘛。直接切換到dev分支,然後拉一下最新代碼,在基與dev分支切出一個bugfix分支進行修複bug,開發完畢在切回dev,合并bugfix不就ok了嗎?确實是這樣,但是還有一個細節,當你切換到dev的時候,你在zs這個分支上可能還有一些代碼仍在工作區或者暫緩區,那應該怎麼把這些東西處理完畢呢?直接執行
git commit
嗎?,感覺不是太好。我們可以先執行
git add .
,然後執行
git stash
然後修複完bug之後切回zs分支,執行
git stash apply
恢複之前的代碼,繼續開發
git stash pop // 會變更stash裡面的棧
git stash apply // 不會變更stash裡面的棧
場景二
manager在dev分支上合并zs分支,發現合并完畢之後有一些沖突,然後manager嘗試解決這些沖突,但是發現有些沖突好像搞不定,需要zs自己搞,然後manager執行
git merge --abort
,也就是我不合并了,恢複合并zs這個分支之前的樣子,然後通知zs,讓他自己解決沖突,這個時候zs該如何操作呢?
zs切換到dev分支,然後拉取最新代碼,然後再切換回zs分支,執行
git merge dev
,然後解決沖突完畢,在zs分支執行
git push
,然後通知manager沖突解決完畢了,現在可以合并zs分支了。然後manager切換到zs分支,拉取最新代碼,然後再切回dev分支,然後基于dev分支,繼續merge zs這個分支。