從今天開始使用git 系列(二)

cover
這是從今天開始使用git的第二篇,前一篇可以在我的部落格中找到。這一篇主要寫分支和如何多人協作同一個倉庫。
fork一個倉庫
fork一個倉庫可以將倉庫複製到自己的倉庫下。
多人協作一個倉庫的時候,我們通常都是每個人fork一個倉庫,然後在這個fork的倉庫中開發,然後再發請求合併自己的倉庫到fork到源倉庫中。
我在一個組織中建立了一個倉庫: ofollow,noindex">c4evth/git-train ,供協作練習。
現在我從這個組織到倉庫fork一份程式碼到自己的倉庫中。

點選fork
然後選擇要fork到哪裡

選擇
過了一會,就fork好了。

fork完成
現在這個倉庫就和我們自己的倉庫一樣,可以clone到本地,開發,推送。
推送更新到源倉庫
把fork下來的倉庫克隆下來,並新增一個index.js,然後推送到github。

更新後
然後在這個倉庫頁面中,點選new pullrequest,來建立一個拉取請求。

new PR
然後選擇從哪個倉庫到哪個分支,合併到哪個倉庫到哪個分支。在下面可以看到本次的更新。
填寫PR的標題和描述,creat,就將PR發出去了,然後源倉庫的擁有者就收到提醒。

commit pr
建立成功,下面按鈕顯示與base倉庫沒有衝突。

new PR
在倉庫擁有者看到這條pr後,會對你的程式碼review,然後確定要不要合併進去。因為我是c4evth/git-train的擁有者,所以我就自己稽核了。
通過之後,可以看到

pr merged
表示已經合併進去。然後去源倉庫看一下,也已經更新了

forked update
分支
分支,從意思上來理解就可以。比如現在程式碼是可以跑的,然後你想加個功能上去,就可以從現在這個節點,開一個分支,在這個分支上開發,這個分支和原來的分支是不衝突的。
我們來新建一個分支,在命令列中:
git checkout -b dev
這條命令新建了一個dev分支,並轉到這個dev下。
然後我們對這個分支進行開發,我在這裡編輯了index.js。然後推送上去,這時候土鬆和之前有一點不同:

push dev
在github中,切換到dev分支

switch to dev
可以看到,index.js更新了。

switch to dev
再切換到master,檢視index.js卻沒有更新。

master index.js
衝突
假設現在有多個人fork了,並在開發,你現在本地的程式碼好幾天沒開發,但是別人卻在這幾天發了好多個pr,源倉庫也更新了。這時候,你已經落後好幾個版本了,如何更新到這個版本跟上進度繼續開發呢?
新建一個remote
在命令列中:
git remote add upstream 源倉庫的地址
這樣就新建了一個remote,名字叫upstream。
然後我們從這個upstream(上游),拉取程式碼:
假設我們要與上游的dev分支同步。
git pull upstream dev
現在上游的程式碼已經拉下來了,然後我們將它與本地合併:

merge upstream
git merge upstream/dev
這樣就將上游的dev分支與當前分支合併了,然後再推送就不會出現你在沒有跟上版本的情況下向源倉庫推送更新的情況。
有時候合併程式碼會有衝突,需要手動編輯這些衝突,在編輯的時候就能看見,刪除不要的程式碼就好。
總結
整個流程就是這個樣子

summary