目錄
1 多使用者
1.1 Josh
1.2 aimxu
2 删除分支
3 沖突
4 最後
5 附錄
git和其他版本管理軟體一樣,最令人興奮的一點是可以實作多人協作。
多個人共同完成一個項目,非常容易起沖突,熟練使用git各種功能可以有效避免沖突,也能進一步提高工作效率。
下面我們就來看一下git如何實作多人協作。
1 多使用者
1.1 Josh
現在假設來了一個新同僚 Josh ,共同完成這個任務。
如果想要加入項目,必須先下載下傳原有的代碼(假設他的電腦已經配置好了git)
$ git clone [email protected]:aimxu/testgit.git
代碼下載下傳下來,就可以開始項目了,而他分到的任務是添加一個減法功能。于是他添加了一個新的分支,叫 feature2。
編寫代碼
然後就可以上傳了,根據之前學習的指令,一步一步走,可能比較着急,沒有管對不對,就直接上傳到遠端倉庫
git add .
git commit -m "add substract"
git push -u origin feature2
這時候上傳的是feature2
這時候在遠端倉庫中,盡管沒有看到添加的減法功能,注意到了一點變化,沒錯,多一個branch
我們可以看到兩個branch中,feature2是活動的branch,這個不難了解,因為我們沒有上傳的時候沒有切換branch到master,這樣做會不是有問題呢?
1.2 aimxu
這個問題其實不大,因為如果 feature2 是 Josh 自己維護的,其他人一般不會用到 feature2 這個分支,但是不是還有什麼問題?
沒錯,沒有合并分支,master 分支還是沒有減法功能,是以如果 Josh 想讓其他同僚用到自己的功能,必須合并分支
從上面的圖可以看到原來的使用者aimxu,根本沒有看到新的減法功能,那沒有辦法得到 Josh 的工作了嗎?其實是可以的(雖然一般不這樣做)
git pull origin feature2:feature2
origin:連接配接的名稱
第一個feature2,遠端倉庫的分支名
第二個feature2,本地倉庫的分支名
【注】push也是可以選擇分支上傳代碼git push -u origin <local_branch>:<remote_branch>
這裡的順序跟pull反過來
可以這樣記憶,代碼的總是從左到右的
pull(拉)是從遠端下載下傳到本地( remote -> local )
push(推)是從本地上傳到遠端( local -> remote )
2 删除分支
這時候,不管是誰已經完成了分支的合并,并删除了遠端倉庫的分支,隻有一個分支master
git push origin --delete feature2
通過origin連接配接,删除遠端倉庫的 feature2 分支。
但是突然發現,原來 Josh 寫的代碼錯了。
經管完成了減法操作,但是在主函數中,并沒有 #include“dec.h”,這樣執行程式肯定是錯的
這是 Josh 肯定瑟瑟發抖,自己的錯誤已經整合到主分支了,很有可能會影響到後面的工作,
不慌,這是隻要建立一個原來的分支,如果忘了分支名,可以用 git reflog檢視删除了的分支的記錄,找到合并前的分支号
reflog是reference log的意思,可以查詢和版本相關的曆史操作,但是版本号好像有什麼不同
沒錯,版本号特别短,隻有7位,其實這裡是版本号的前7位,已經可以代表該版本了。
這時回退版本,再建立分支feature2,修改錯誤,合并上傳
git switch -c feature2
# 修改代碼
git add .
git commit -m "add substract"
git switch master
git merge freature2
git branch -d feature2
git push
解釋一下最後一句
3 沖突
在 Josh 為了他的部分焦頭爛額的時候,aimxu也接到了新的任務,需要為程式添加一個乘法功能。
老司機二話不說就開幹,忙活了兩分鐘完成該功能。
等一下,是不是有點似曾相識?
沒錯,還是少了那一句 #include"dec.h",Why????(參考上一節)
此時 Josh 已經完成了修複,但是,但是,aimxu 忘了pull,忘了pull,忘了pull!!!
就push了
git add .
git commit -m "add multiplation"
git push
為了簡單起見,沒有用新的分支
果不其然,又來了
最後隻能乖乖地pull一下,檢視hello.c,發現一大堆要改的
紅色部分框部分是自己添加的内容,藍色框部分是别人添加的内容,需要手動整合一下,再上傳一次
是以
在修改代碼之前,必須先pull,至于什麼時候pull,網上有很多參考的文章,可以參考隔壁的一篇文章,講得還是很有道理的。
4 最後
其實git有很多功能,很多情況,但是總的一句而言,git隻是個工具,沒有必要把它研究透了,遇到各種情況再好好地分析,學習新的特性就可以了,在最開始,隻需要掌握簡單,最核心的部分就可以了。
在每次操作前,務必三思,尤其是初學者,經常會因為腦子一熱,寫錯指令,導緻代碼丢失,遇到這種情況千萬不要慌張,捋清楚思路,一步一步的把代碼還原回來。在這期間隻要不是頻繁操作,都有很大的可能性能還原回來的。
是以在最開始務必自己用一個小程式來練手,千萬不要把有價值的代碼用來練手,否則将會得不償失。
就簡單寫到這裡吧。有時間的話再添加一些内容。
5 附錄
git常用指令速查表
GIT CHEAT SHEET (PDF)
連結:https://pan.baidu.com/s/1XgZ81uf3OidNtKHHC6o5yw
提取碼:ckom