天天看點

git的使用-協作篇1 多使用者2 删除分支3 沖突4 最後5 附錄

目錄

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的使用-協作篇1 多使用者2 删除分支3 沖突4 最後5 附錄

編寫代碼

git的使用-協作篇1 多使用者2 删除分支3 沖突4 最後5 附錄

然後就可以上傳了,根據之前學習的指令,一步一步走,可能比較着急,沒有管對不對,就直接上傳到遠端倉庫

git add .
git commit -m "add substract"
git push -u origin feature2
           
這時候上傳的是feature2
git的使用-協作篇1 多使用者2 删除分支3 沖突4 最後5 附錄

這時候在遠端倉庫中,盡管沒有看到添加的減法功能,注意到了一點變化,沒錯,多一個branch

git的使用-協作篇1 多使用者2 删除分支3 沖突4 最後5 附錄
git的使用-協作篇1 多使用者2 删除分支3 沖突4 最後5 附錄

我們可以看到兩個branch中,feature2是活動的branch,這個不難了解,因為我們沒有上傳的時候沒有切換branch到master,這樣做會不是有問題呢?

1.2 aimxu

這個問題其實不大,因為如果 feature2 是 Josh 自己維護的,其他人一般不會用到 feature2 這個分支,但是不是還有什麼問題?

沒錯,沒有合并分支,master 分支還是沒有減法功能,是以如果 Josh 想讓其他同僚用到自己的功能,必須合并分支

git的使用-協作篇1 多使用者2 删除分支3 沖突4 最後5 附錄

從上面的圖可以看到原來的使用者aimxu,根本沒有看到新的減法功能,那沒有辦法得到 Josh 的工作了嗎?其實是可以的(雖然一般不這樣做)

git pull origin feature2:feature2
           

origin:連接配接的名稱

第一個feature2,遠端倉庫的分支名

第二個feature2,本地倉庫的分支名

git的使用-協作篇1 多使用者2 删除分支3 沖突4 最後5 附錄
【注】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”,這樣執行程式肯定是錯的

git的使用-協作篇1 多使用者2 删除分支3 沖突4 最後5 附錄

這是 Josh 肯定瑟瑟發抖,自己的錯誤已經整合到主分支了,很有可能會影響到後面的工作,

不慌,這是隻要建立一個原來的分支,如果忘了分支名,可以用 git reflog檢視删除了的分支的記錄,找到合并前的分支号

git的使用-協作篇1 多使用者2 删除分支3 沖突4 最後5 附錄

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也接到了新的任務,需要為程式添加一個乘法功能。

老司機二話不說就開幹,忙活了兩分鐘完成該功能。

git的使用-協作篇1 多使用者2 删除分支3 沖突4 最後5 附錄
git的使用-協作篇1 多使用者2 删除分支3 沖突4 最後5 附錄

等一下,是不是有點似曾相識?

沒錯,還是少了那一句 #include"dec.h",Why????(參考上一節)

此時 Josh 已經完成了修複,但是,但是,aimxu 忘了pull,忘了pull,忘了pull!!!

就push了

git add .
git commit -m "add multiplation"
git push
           
為了簡單起見,沒有用新的分支

果不其然,又來了

git的使用-協作篇1 多使用者2 删除分支3 沖突4 最後5 附錄

最後隻能乖乖地pull一下,檢視hello.c,發現一大堆要改的

git的使用-協作篇1 多使用者2 删除分支3 沖突4 最後5 附錄

紅色部分框部分是自己添加的内容,藍色框部分是别人添加的内容,需要手動整合一下,再上傳一次

是以

在修改代碼之前,必須先pull,至于什麼時候pull,網上有很多參考的文章,可以參考隔壁的一篇文章,講得還是很有道理的。

4 最後

其實git有很多功能,很多情況,但是總的一句而言,git隻是個工具,沒有必要把它研究透了,遇到各種情況再好好地分析,學習新的特性就可以了,在最開始,隻需要掌握簡單,最核心的部分就可以了。

在每次操作前,務必三思,尤其是初學者,經常會因為腦子一熱,寫錯指令,導緻代碼丢失,遇到這種情況千萬不要慌張,捋清楚思路,一步一步的把代碼還原回來。在這期間隻要不是頻繁操作,都有很大的可能性能還原回來的。

是以在最開始務必自己用一個小程式來練手,千萬不要把有價值的代碼用來練手,否則将會得不償失。

就簡單寫到這裡吧。有時間的話再添加一些内容。

5 附錄

git常用指令速查表

git的使用-協作篇1 多使用者2 删除分支3 沖突4 最後5 附錄

GIT CHEAT SHEET (PDF)

連結:https://pan.baidu.com/s/1XgZ81uf3OidNtKHHC6o5yw 

提取碼:ckom

git