首先在本地電腦新建HelloWorld文件夾,然後打開Git Bash,經過git init
命令把這個目錄變成Git能夠管理的倉庫:git
然後編輯HelloWorld.c文件github
a. 設置用戶名和郵箱分佈式
b. 將HelloWorld.c添加至暫存區,再提交到本地倉庫fetch
c 查看狀態、日誌spa
git log顯示從最近到最遠的提交日誌,其中commit id爲版本號,可以使用git reset --hard commit id實現版本回退3d
創建遠程倉庫指針
生成SSH KEY日誌
這裏要特別注意的是其中郵箱是你github帳號註冊的郵箱,要否則沒法將本地倉庫和本地倉庫關聯起來,出現相似下圖的錯誤code
在github上添加SSH KEYblog
這時咱們查看github上的對應倉庫,會發現已然同步。
因爲遠程庫是空的,於是第一次推送master
分支時,加上了-u
參數,Git不但會把本地的master
分支內容推送的遠程新的master
分支,還會把本地的master
分支和遠程的master
分支關聯起來,在之後的推送或者拉取時就能夠簡化命令。
爲了便於比較fetch和pull的區別,首先將本地的工做空間中HelloWorld.c文件修改以下並提交至本地倉庫
經過git log可查看具體提交狀況
這裏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分支上
git pull <遠程主機名> <遠程分支名>:<本地分支名>
好比,取回origin主機的master分支,與本地的master分支合併,須要寫成下面這樣。
git pull origin master:master
若是遠程分支是與當前分支合併,則冒號後面的部分能夠省略。
git pull origin master
上面命令表示,取回origin/master分支,再與當前分支合併。實質上,這等同於先作git fetch,再作git merge。
新建test.txt文件
git merge
git pull
整個過程當中咱們能夠看出git做爲分佈式系統的強大之處,而遠程倉庫和本地倉庫既相互獨立而又緊密相連,分支的存在使得工做可以分工而有條理地進行。由上咱們也能夠得知,"git fetch"命令執行完畢以後,還不會當即將下載的文件合併到當前工做目錄裏,要是想將從遠程分支下載的文件更新到工做目錄裏,須要執行一個合併("git merge")操做。"git pull"的問題是它把過程的細節都隱藏了起來而是自動合併,這樣致使本地工做目錄在未經確認的狀況下就會被遠程分支更新,一旦代碼有問題,很難找到錯誤的地方,於是建議使用git fetch+git merge。