第二章作业第2题--苏志华
2.每人自己建立一個HelloWorld項目,練習使用git的add/commit/push
/pull/fetch/clone等基本命令。比較項目的新舊版本的差別。
(1)創建版本庫:
? ? ?首先在本地電腦新建HelloWorld文件夾,而后打開Git Bash,通過git init命令把這個目錄變成Git可以管理的倉庫:
而后編輯HelloWorld.c文件
(2)設置用戶名、郵箱,添加、提交及查看狀態、日志
a. 設置用戶名和郵箱
b. 將HelloWorld.c添加至暫存區,再提交到本地倉庫
c 查看狀態、日志
git log顯示從最近到最遠的提交日志,其中commit id為版本號,可使用git reset --hard commit id實現版本回退
(3)在github上建立遠程倉庫并添加SSH KEY
建立遠程倉庫
生成SSH KEY
這里要特別注意的是其中郵箱是你github賬號注冊的郵箱,要不然無法將本地倉庫和本地倉庫關聯起來,出現類似下圖的錯誤
?在github上添加SSH KEY
?(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。
轉載于:https://www.cnblogs.com/bywb/p/5873611.html
總結
以上是生活随笔為你收集整理的第二章作业第2题--苏志华的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: iOS异常捕获
- 下一篇: Elasticsearch2.x Bre