天天看點

Git基礎級介紹

這篇随筆是在學習了廖雪峰老師的git教程之後寫的總結,要看詳細的基礎級git介紹可以去http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000

如果想看更加詳細的git介紹,可以去我們的團隊部落格http://www.cnblogs.com/buaase/p/5066288.html

如果還想看更更加詳細的git介紹,可以去百度雲盤下載下傳https://pan.baidu.com/s/1nvq46U1  提取碼tpah(好像不需要提取碼)

以下介紹适合使用過git但是不明白git的朋友閱讀

git的基本工作原理

工作區:實際上就是自己編寫檔案的環境,比如我用java寫一個程式,在eclipse中編寫的代碼就是在工作區中;就相當于我們隻是取到了倉庫中的檔案的鏡像,然後對檔案修改(事實上對磁盤上的檔案作了修改),我們修改檔案的地方就是工作區

暫存區:類似于git的一個緩存,在一次送出中,我們可能需要添加很多個檔案,于是我們将需要送出的檔案一個一個add到暫存區,add完成後,我們用commit指令将剛才所有的add一次性地送出到本地倉庫

本地倉庫:真git真正管理檔案的地方,裡面所有的檔案都受git的管理,檔案的修改,删除,git都有記錄

遠端倉庫:預設名稱是origin,遠端倉庫和本地倉庫類似,但是在多人合作的時候,别人能看見遠端倉庫卻不能看見你的本地倉庫,每個人也有自己的本地倉庫。在多人合作的時候,遠端倉庫放的往往是最新的代碼,就是大家都認為正确的更新才push上去的(push是送出,pull是從遠端倉庫擷取并合并到本地)。在每次送出到遠端倉庫之前一般都要進行git pull,這是為了避免遠端倉庫和本地倉庫的不一緻:遠端倉庫可能存在其他人修改過後的代碼,而你本地倉庫還是以前的舊代碼,這個時候就需要将遠端倉庫的代碼同步(pull)到本地倉庫(可能和本地倉庫的代碼存在沖突,這個時候需要解決沖突),然後再講本地倉庫的代碼送出(push)到遠端倉庫。

  add的過程是将工作區的檔案修改資訊放到暫存區,commit是将暫存區的檔案修改資訊告訴本地倉庫,本地倉庫就會記錄修改資訊,将檔案版本更新(HEAD指針的變化),pull就是将遠端倉庫同步到本地倉庫,push就是将本地倉庫的内容同步到遠端倉庫

git分支政策

  git branch XX可以建立分支,git checkout XX可以切換到某一個分支:XX表示分支名

  一個分支就相當于一條線,每一個分支都進行獨立的開發,互不影響。

  現實中,我們往往在master上釋出版本(當需要釋出新版本時才會使用,平時不會在master上修改代碼),建立一個dev分支進行開發:當需要不新版本時,會将dev分支上的代碼和master上的代碼進行合并(merge),這樣dev上的代碼就會更新到master分支上。

  舉一個例子來說:

  我們在做數學卷子的時候,正常一點的人(除開很牛逼的和那些無所謂的)都會選擇在草稿紙上進行運算,感覺運算結果正确之後才會将結果寫在試卷上,最後交卷。這就和分支政策類似:我們的master分支就是試卷,釋出新版本就是向廣大使用者交卷;我麼的dev分支就是草稿紙,不管我們在草稿紙上怎麼運算,都不會對我們最終的成績造成影響,隻需要将最終運算結果寫在試卷上即可(事實上還是不要讓你的草稿紙太亂,以免自己都看不懂);我們可以用很多草稿紙來計算(題目比較複雜的話),然後将草稿紙A上的結果寫在草稿紙B上,最後才将草稿紙B上的結果寫在試卷上,就像我們會有很多分支一樣。

沖突:如果我們在打草稿的過程中發現我們以前寫在試卷上的結果有問題,這個時候就是沖突。在我們合并分支的時候,發現dev分支和master分支上都修改了同一内容,這個時候git就不知道到底該使用哪一個分支上的内容,于是會在沖突檔案上标記(HEAD字樣),這個時候隻需要修改沖突檔案,使其成為你想要的内容,然後重新送出即可。

bug分支:當我們用某種方式發現我們的選擇題有問題(當然不是“左顧右盼”),我們就需要拿出草稿紙來進行計算,驗證,修改,最後寫上正确答案。問題即是bug,我們在遇到bug 的時候就可以另開一個分支來進行bug修改,修改完成之後再合并分支

git的幾個指令

常用的add、commit、pull、push就不介紹了

1.git checkout –filename

這裡的checkout不是切換分支,而是用倉庫的filename檔案替換工作區的filename檔案,不管是删除還是修改,都可以複原。但是這樣一來就會丢棄工作區的修改,就找不回來了

2.git stash

這個指令是暫存工作區的内容,比如我們急需修改某一個bug,但是現在的工作一時半會還不能完成,這個時候就可以使用git stash将工作區的内容儲存起來。等到我們處理完bug之後,切回現在的分支,然後使用git stash pop将暫存的内容pop(彈)出來。另外,我們可以使用git stash list檢視現在的stash中有哪些内容

3.git log

檢視目前的commit資訊,每個commit資訊有對于的hash碼,hash碼具有唯一性

4.git reset --hard

這個指令是用來在本地進行回退的,在後面加上參數,可以實作回到某一個commit的狀态,參數類型有

HEAD:最近的一次commit(其實就是git log的最新的一項),HEAD指針每一次都是指向最新的commit,當回退之後是指向log的最新的一項

HEAD^:上一次commit

HEAD^:上上次commit

hash碼:回到hash碼對應的那一次commit,hash碼可以通過git log檢視,回退之後,log裡面沒有的commit的log可以通過git reflog檢視