1. 程式人生 > >Git學習筆記精簡版

Git學習筆記精簡版

Git學習筆記-廖雪峰教程學習@[三川水祭]
僅作學習交流使用,將來的你會感謝現在拼命努力的自己!!!

它是什麼

Git是分散式版本控制系統,那麼什麼是分散式的版本控制系統呢,可以這樣理解:每個人在本地電腦上都有一個將要編輯的版本庫,包含從初始到當前的程式碼的各個版本,如何進行協作呢?在僅使用master的情況下,新建立一個Git版本伺服器,每個員工從伺服器拉取最新版本,之後程式設計師之間商量每個人處理哪個部分,在本地對程式碼進行修改,完成後從伺服器拉取最新程式碼版本,進而提交自己對程式碼的修改。詳情參考部落格園博文:https://www.cnblogs.com/onelikeone/p/6857910.html。

Git主要架構

Git主要包括工作區與版本庫兩部分,工作區就是對檔案程式碼進行修改的地方,而版本庫則是.git目錄下存放的東西。主要的架構如圖1:
圖1

怎麼安裝

sudo apt-get install git (僅針對ubuntu系統)其他自行百度
git config --global user.name “Your Name” 將Your Name改成你主機名字
git config --global user.email "[email protected]" 將郵箱改成你自己的

怎麼初始化

新建一個空白的地準備開始搞Git:mkdir learngit
初始化一個對空白目錄進行初始化(以後就在這裡編輯了):
進入當前目錄下:cd learngit
初始化目錄:git init

開始使用

首先將程式碼檔案readme.txt放入learngit資料夾中,將該檔案加入Git版本倉庫中:git add readme.txt,注意可多次新增。
之後就是將上述所有修改的程式碼加上註釋並提交:git commit -m “something you want to say”。

進行除錯

接下來進行程式碼的編輯,使用git status檢視當前倉庫的狀態,如果檔案發生了修改,使用git diff檢視到底那裡進行了改動。修改完成後使用git add readme.txt將修改後的檔案放入Git版本庫中,並通過git commit -m “something”來描述進行的更改。
進行回顧:


要看我們之前在何處進行了更改,肯定不能自己一個一個記憶,此時git的一個命令就是完成該任務的:git log --pretty=oneline,可以檢視歷史中各個版本的修改以及提交的修改的內容。

版本跳躍

Git是使用head指向各版本的id識別符號,通過對head的指向更改當前版本,如圖2。
首先使用git log --pretty=oneline完成版本id檢視.
之後使用git reset --hard commit_id進行版本的跳轉,要想直接跳往上一版本的話,直接輸入git reset –hard HEAD^即可,上4個版本,輸入git reset –hard HEAD~4即可。要是後悔跳往上一版本的話咋整,輸入git reflog即可完成完成版本號的檢視,進而完成版本的跳轉。旋轉、跳躍、我閉著眼。。。
版本跳躍示意圖

Git修改檔案

Git需要將修改後的檔案提交到暫存區後才可以提交。完整的修改命令如下:
第一次修改 -> git add -> 第二次修改 -> git add -> git commit

Git撤銷修改

當自己修改後準備提交,發現我的天哪,有個錯誤,咋整?別急,使用 “git checkout – …” 丟棄工作區的改動,會回到最初更改的狀態。
要是已經提交到暫存區了,咋整?先使用 “git reset HEAD …” 撤出暫存區,之後使用"git checkout – …" 丟棄工作區的改動。
要是已經上傳到本地的master上了,咋整?直接使用git reset --hard commit_id進行版本的跳轉。
要是推送到遠端,咋整?準備好辭職信,然後明天遞交。

Git檔案的刪除

要想刪除一個檔案咋整,可以先在本地刪除檔案,然後輸入命令:git rm filename。
要是刪錯了,還沒提交,咋整?輸入命令git checkout – test.txt同步版本庫到本地。
要是刪錯了,還提交到本地庫中,咋整?通過git reset --hard commit_id進行版本跳轉,然後輸入命令git checkout – test.txt同步版本庫到本地中。

Git殺手級工具----github

  1. 註冊github;
  2. 在本地家目錄下.ssh目錄中生成id_rsa(私鑰)和id_rsa.pub(公鑰)兩個檔案。通過命令ssh-keygen -t rsa -C "[email protected]",然後一直回車就好。郵箱記得改成自己的。接下來在github賬號上的賬戶設定中點開SSH and GPG keys,點選new_ssh_key,新增本機的id_rsa.pub。應用就好。主要Github上面不要放啥敏感資訊,因為內容是公開的。
  3. 在github上建立新的repositories,名字寫為learngit,其餘保持預設。如圖3。
    github上生成新庫的流程圖
  4. 之後會生成如圖4。輸入圈內的程式碼便可以從本地推送git版本庫到github上了,這是每天晚上都需要做的事情。當然了,想使用ssh協議的也可以點選上述SSH按鈕,就會生成相應的推送程式碼。首次輸入push時候需要輸入使用者名稱與密碼,如圖5。
    生成版本庫後自帶原始碼圖
    Github上此時就可以看到在版本庫中的最新資訊,清晰明瞭。當沒有網路時候,本機使用自身的版本庫進行編輯,完全無壓力,當有網路時,同步到github上,並拉取到本地即可。
    首次推送的命令圖
  5. 從遠端克隆檔案到本地,這是每天早上都需要做的事情。從命令列輸入git clone [email protected]:zht012323/gitskill.git。具體是咋整呢?如圖6。
    從遠端克隆檔案
    在本地首次輸入克隆命令時候,需要輸入yes,之後會發生警告,無視就好。如圖7。
    首次從遠端克隆專案

分支管理

何為分支,就是給別人的家建立一個映象,然後在映象的家上進行更改,不會影響別人家裡的東西,當映象裡裝潢好了,直接使用一種叫做分支合併的力量,將別人的家就直接變成映象裡的家。

大家如何建立與合併分支呢?

首先輸入git checkout -b dev建立dev分支。
接下來輸入git branch會得到當前所在分支的名字。
對檔案進行編輯,完成後進行commit提交,均是在當前分支下進行的編輯。Master分支保持不變。
接下來跳轉到master分支:git checkout master
通過master合併dev分支:git merge dev
最後刪除dev分支:git branch -d dev

如何解決合併檔案衝突的問題?

當兩個分支使用git merge branch1發生衝突的時候,先解決衝突,方式手動編輯master分支中的檔案,將branch1中的更改的內容放入。接下來將master提交。最後刪除分支。在這個過程中,我們可以使用git log –graph進行分支合併的視覺化。
平常的團隊協作的過程如圖8,當正常合併分支後,並將分支進行刪除,則會造成該分支在git log中無法出現。因此如果需要檢視所有分支資訊的時候,需要增加上git merge --no-ff -m “merge with no-ff” dev。

  1. a和b分支修改不同位置檔案時 dev合併完a之後,b分支先git pull拉取最新程式碼,再使用dev合併b就沒有衝突了。
  2. a和b修改相同位置檔案時 dev合併完a之後,b分支先git pull拉取最新程式碼,這時候就會有衝突,手動解決一下,dev再次merge b分支就不會衝突了。
    團隊協作的圖片來源於如下網頁:協作圖片來源連結
    團隊協作流程圖

如何解決新上傳一個專案到分支的問題

當我們的程式碼到別人的網頁上下載,然後想將其傳遞到一個分支中,如博主在之後的webapp搭建中的day12的專案。可以在git bash中進入當前專案,然後按序輸入一下內容:

# 初始化專案
git init
# 將專案內容新增到暫存區
git add *
# 新增評論,將版本資訊提交
git commit -m 'day12'
# 新建分支day12
git branch day12
# 進入分支day12
git checkout day12
# 連結遠端github專案庫
git remote add origin [email protected]:zht012323/awesome-python3-webapps.git
# 遠端推送專案
git push origin day12

如何進行bug的修復

首先儲存當前的進度,使用git stash,之後使用git checkout master跳轉到需要更改的bug分支,接下來增加新的問題分支git checkout -b issue-101,在新分支上進行更改,更改完成後提交修復的bug分支,使用git add readme.txt進行,同時增加提交資訊git commit -m "fix bug 101"進行bug提交,接下來轉換到master分支,使用git checkout master,最後使用git merge --no-ff -m “merged bug fix 101” issue-101命令對分支進行合併。完成了bug修復後,跳轉到dev分支,使用git checkout dev,接下來直接使用git stash pop恢復dev工作區的分支。當有多個儲存的stash時候,先使用git stash list檢視分支,接下來使用git stash apply [email protected]{0}進行恢復。

如何開發新功能

新建一個功能分支,對分支程式碼進行編輯,之後進行提交、合併,如果經費不足,刪掉該功能,使用git branch -D 強行刪除即可。

多人協作的模式

首先,可以試圖用git push origin 推送自己的修改;
如果推送失敗,則因為遠端分支比你的本地更新,需要先用git pull試圖合併;
如果合併有衝突,則解決衝突,並在本地提交;
沒有衝突或者解決掉衝突後,再用git push origin 推送就能成功!
如果git pull提示no tracking information,則說明本地分支和遠端分支的連結關係沒有建立,用命令git branch --set-upstream-to origin/。

標籤管理

啥是標籤,通俗的將就是給當前的code版本加個索引,以後想重新用到這個版本的時候,直接使用索引就好,不用通過一串數字來進行版本的定位。
命令git tag 用於新建一個標籤,預設為HEAD,也可以指定一個commit id;
命令git tag -a -m "blablabla…"可以指定標籤資訊;
命令git tag可以檢視所有標籤。
管理標籤
命令git push origin 可以推送一個本地標籤;
命令git push origin --tags可以推送全部未推送過的本地標籤;
命令git tag -d 可以刪除一個本地標籤;
命令git push origin :refs/tags/可以刪除一個遠端標籤。
自定義Git
忽略某些檔案時,需要編寫.gitignore;當然了,享受拿來主義https://github.com/github/gitignore 上存放了各種.gitignore檔案。
.gitignore檔案本身要放到版本庫裡,並且可以對.gitignore做版本管理!
git config --global alias.st status 命令是將status配置為別名叫做st的快捷命令,之後就直接敲git st就好。

奉勸大家,用著用著就會了!!!

博主會隨著自己的使用不斷調整本部落格,請大家多多指教。

參考部落格
廖雪峰的官方網站