第二章做業第2題--蘇志華

2.每人本身創建一個HelloWorld項目,練習使用git的add/commit/push

/pull/fetch/clone等基本命令。比較項目的新舊版本的差異。

(1)建立版本庫:

     首先在本地電腦新建HelloWorld文件夾,然後打開Git Bash,經過git init命令把這個目錄變成Git能夠管理的倉庫:git

然後編輯HelloWorld.c文件github

(2)設置用戶名、郵箱,添加、提交及查看狀態、日誌

a. 設置用戶名和郵箱分佈式

b. 將HelloWorld.c添加至暫存區,再提交到本地倉庫fetch

c 查看狀態、日誌spa

git log顯示從最近到最遠的提交日誌,其中commit id爲版本號,可以使用git reset --hard commit id實現版本回退3d

(3)在github上創建遠程倉庫並添加SSH KEY

創建遠程倉庫指針

生成SSH KEY日誌

這裏要特別注意的是其中郵箱是你github帳號註冊的郵箱,要否則沒法將本地倉庫和本地倉庫關聯起來,出現相似下圖的錯誤code

 在github上添加SSH KEYblog

 (4)關聯倉庫並將本地倉庫上傳到遠程倉庫

這時咱們查看github上的對應倉庫,會發現已然同步。

因爲遠程庫是空的,於是第一次推送master分支時,加上了-u參數,Git不但會把本地的master分支內容推送的遠程新的master分支,還會把本地的master分支和遠程的master分支關聯起來,在之後的推送或者拉取時就能夠簡化命令

 (5)從遠程庫fetch、pull、clone

爲了便於比較fetch和pull的區別,首先將本地的工做空間中HelloWorld.c文件修改以下並提交至本地倉庫

經過git log可查看具體提交狀況

a、使用git fetch從遠程獲取最新版本到本地

這裏git branch -a是顯示全部分支狀況(可看出目前分支位於master),而git branch -r是隻顯示遠程分支

下圖中使用git diff命令查看不一樣分支的狀況,二者有差別,說明git fetch不會自動merge,那麼我想merge該如何呢?

使用git merge命令,即合併分支,按照預想的應該是兩分支有衝突,合併的時候會出現錯誤,而後得先解決衝突才能合併,可會出現下面的狀況

what???ㄟ(▔︹▔ㄟ) (╯▔︹▔)╯

Already up-to-date 說明已經合併了啊,但是切換到對應的分支,分別查看HelloWorld.c的內容仍然是不同,這是爲何呢?

這裏推薦一個gitk的命令,它可將分支狀況很好的可視化以及歷史信息顯示出來,

舉一個例子來更好地說明這種狀況,假設在branch1分支上提交歷史以下

而後創建一個新的分支branch2,繼續提交四次:

此時branch1的頭指針指向D,branch2的頭指針指向H。"Already up-to-date"說明你想要合併的分支已然成爲你如今分支的parent,這裏D即是H的parent

那麼將branch1分支合併到branch2是無論用的,由於branch2並無發生改變,要想合併就須要將branch1的指針提交歷史變成

即便用git reset --hard H強制變成branch1分支的指針指向H 

回到問題中,remotes/origin/master顯然是master的parent,所以沒法將其合併到master分支中。

下圖中git fetch origin master:temp 這句命令的意思是:將遠程origin倉庫的master分支下載到本地並新建一個分支temp

顯然這種狀況是能夠將master分支合併到temp分支上

b、git pull命令的做用是,取回遠程主機某個分支的更新,再與本地的指定分支合併。

git pull <遠程主機名> <遠程分支名>:<本地分支名>

好比,取回origin主機的master分支,與本地的master分支合併,須要寫成下面這樣。

git pull origin master:master

若是遠程分支是與當前分支合併,則冒號後面的部分能夠省略。

git pull origin master

上面命令表示,取回origin/master分支,再與當前分支合併。實質上,這等同於先作git fetch,再作git merge。

c、可以使用git clone將遠程庫克隆到本地倉庫

d、在遠程倉庫新建一文件,然後git fetch、git clone

新建test.txt文件

 

git merge

git pull

(6)總結:

      整個過程當中咱們能夠看出git做爲分佈式系統的強大之處,而遠程倉庫和本地倉庫既相互獨立而又緊密相連,分支的存在使得工做可以分工而有條理地進行。由上咱們也能夠得知,"git fetch"命令執行完畢以後,還不會當即將下載的文件合併到當前工做目錄裏,要是想將從遠程分支下載的文件更新到工做目錄裏,須要執行一個合併("git merge")操做。"git pull"的問題是它把過程的細節都隱藏了起來而是自動合併,這樣致使本地工做目錄在未經確認的狀況下就會被遠程分支更新,一旦代碼有問題,很難找到錯誤的地方,於是建議使用git fetch+git merge。

相關文章
相關標籤/搜索