1. 程式人生 > >Git學習筆記&總結

Git學習筆記&總結

fas -name 團隊合作 詳細信息 log show 用戶 mkdir for

原文廖老師的Git教程:https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000

一、Git的安裝

1.在Windows上安裝Git

從https://git-scm.com/downloads下載,然後按默認選項安裝即可。

2.安裝完後的簡單設置

安裝完成後,還需要最後一步設置,在命令?輸?:

$ git config --global user.name "Your Name"

$ git config --global user.email "[email protected]"

二、創建版本庫

版本庫(repository)又名倉庫,可以簡單理解成一個目錄,這個目錄面的所有文件都可以被Git管理起來,每個文件的修改、刪除,Git都能跟蹤,以便任何時刻都可以追蹤歷史,或者在將來某個時刻可以“還原”。

首先在一個合適的位置創建一個空目錄:$ mkdir GitRepository

進入該目錄後,執行命令:$ git init

三、版本的回退與切換

1、添加文件到Git倉庫

第一步添加:git add readme.txt

第二步提交:git commit –m “wrote a readme file”

 註:首先需要在git倉庫目錄下新建一個readme.txt文件;

 執行第一步後,沒有消息顯示說明添加成功,使用add可以一次提交多個文件;

  -m後面的參數是對本次提交的說明;

$ git status可以命令查看當前Git倉庫狀態,有哪些文件需要add和commit;

$ git diff 可以查看修改過的內容;

2、版本回退

應用場景:文件丟失的情況下,從最近的一次commit中恢復文件。

$ git log 以倒序的方式查看提交日誌;

$ git reset --hard HEAD^ 回退到當前版本的上一個版本;

$ git reset --hard “commitID”回退到具體哪次提交,commitID代表具體commit的版本號;

$ git reflog 查看每一次命令,第一列顯示有commit版本號

3、工作區和版本庫

工作區:我們看到的目錄,剛剛我們創建的GitRepository文件夾;

版本庫:我們執行git init後在生成的隱藏的.git文件夾;

暫存區:.git目錄下有一個stage或index目錄即為暫存區;

技術分享圖片

4、管理修改

Git跟蹤並管理的是修改,而非文件。未add到暫存區的修改是不能夠提交到版本庫的;

$ git diff HEAD -- readme.txt 查看工作區和版本庫裏最新版本的區別

5、撤銷修改

應用場景:把修改錯誤的文件add到了暫存區,但還未commit到版本庫,想撤回本次add。

(1)$ git reset HEAD readme.txt

把暫存區的修改撤銷掉,重新放回到工作區。

(2)$ git checkout -- readme.txt

丟棄工作區的修改,讓該文件回退到最近一次的git add或git commit時的狀態這裏有兩種情況:

一種是readme.txt修改後還沒有add到暫存區,命令執行後回到和版本庫一樣的狀態。

二種是readme.txt已經添加到暫存區,之後又做了修改,命令執行後,文件恢復為添加到暫存區的狀態。

6、刪除文件

(1)應用場景:確定要從版本庫中刪除某個文件

第一步:$ git rm readme.txt

第二步:$ git commit –m “delete readme.txt”

(2)應用場景:工作區誤刪某文件,可以從版本庫中恢復

$ git checkout – readme.txt

四、遠程倉庫

1、添加公鑰到github

首先註冊GitHub賬號並登錄,然後將自己的公鑰添加到GitHub上。公鑰即電腦用戶名目錄下的.ssh目錄下id_rsa.pub文件裏的內容。如果沒有該目錄,需要我們手動生成:

$ ssh-keygen -t rsa -C "[email protected]"

然後在github裏點擊account setting --> SSH Keys à Add SSH Key --> title隨意寫,將密鑰粘貼進去。

2、添加遠程倉庫

第1步:在GitHub上創建一個遠程庫:右上角“+” --> “New repositories ”;

第2步:將本地庫與遠程庫關聯:

$ git remote add origin [email protected]:你的用戶名/learngit.git

註:遠程庫的名字就是origin,這是Git默認的叫法,也可以改成別的。

第3步:將本地內容推送到遠程庫:

$ git push -u origin master

註:用 git push命令,實際上是把當前分支master推送到遠程。由於遠程庫是空的,我們第一次推送master分支時,加上了 -u參數,Git不但會把本地的master分支內容推送的遠程master分支,還會把本地的master分支和遠程的master分支關聯起來,在以後的推送或者拉取時就可以簡化命令。

3、從遠程庫克隆

執行命令:$ git clone [email protected]:你的用戶名/gitskills.git

註:Git支持多種協議,還可以用 https://github.com/huozf/gitskills.git這樣的地址。默認的git://使用ssh,但也可以使用https等其他協議。使用https除了速度慢以外,還有個最大的麻煩是每次推送都必須輸入口令,但是在某些只開放http端口的公司內部就無法使用ssh協議而只能用https。

五、分支管理

1、創建與合並分支


Git都把它們串成一條時間線,這條時間線就是一個分支。截?止到目前,只有一條時間線,在Git裏,這個分支叫主分支,即 master分支。HEAD嚴格來說不是指向提交,而是指向master,master才是指向提交的,所以,HEAD指向的就是當前分支。一開始的時候,master分支是一條線,Git用master指向最新的提交,再用HEAD指向master,就能確定當前分支,以及當前分支的提交點:

技術分享圖片


(1) 創建並切換分支:$ git checkout –b dev
當我們創建新的分支dev時,Git新建了一個指針叫dev,令dev指向master相同的提交,再把HEAD指向dev,就表示當前分支在dev上:

技術分享圖片

註:“-b”參數表示創建並切換分支,相當於命令(2)、(3)之和。

(2) 創建分支:$ git branch dev

(3) 切換分支:$ git checkout dev

(4) 查看當前分支: $ git branch

註:該命令會列出所有分支,前邊標有 * 的表示當前所在分支。

(5) 合並指定分支到當前分支:$ git merge master

(6) 刪除分支: $ git branch –d dev

2、解決沖突


當我們新建一個分支後,master分支新建分支各自都分別有新的提交,這種情況下,Git?無法執行“快速合並”,只能試圖把各自的修改合並起來,但這種合並就可能會有沖突

技術分享圖片

這時候需要我們手動解決沖突,然後才能合並。合並後,查看分支合並圖:

$ git log --graph --pretty=oneline --abbrev-commit

3、分支管理策略

通常,合並分支時,如果可能,Git會用“Fast forward”模式,但這種模式下,刪除分支後,會丟掉分支信息。如果要強制禁用“Fast forward”模式,Git就會在merge時生成一個新的commit,這樣,從分支歷史上就可以看出分支信息。

例如,新建並切換一個分支dev,修改文件並提交。然後切換回master分支,將dev分支合並到master分支:

$ git merge --no-ff -m "merge with no-ff" dev

註:“—no-ff”表示禁用“Fast forword”模式。

此時,分支合並圖變成:

技術分享圖片

4、Bug分支
支上合並就可以了。所以,團隊合作的分支看起來就像這樣:

應用場景:當前工作還未完成且不能夠提交,但上級要求立即修復項目中出現的bug,需要我們停下手頭的工作。

(1)$ git stash 將“工作現場”儲存起來;

(2)$ git stash list 列出所有已儲存的“工作現場”;

(3)$ git stash pop 恢復“工作現場”,且將stash裏的最上一層內容刪除,等同於(4)、(5)命令之和;

(4)$ git stash apply 恢復“工作現場”,但stash裏的內容並未刪除;

(5)$ git stash drop 刪除最上一層“工作現場”;

(6) $ git stash apply stash@{0} 恢復指定的stash內容;

5、多人協作

(1) $ git remote 查看遠程庫信息;

(2) $ git remote –v 顯示遠程庫更詳細信息;

(3) $ git push origin branch_name 推送到遠程庫的指定分支

(4) $ git pull 從遠程庫拉取更新

(5) git branch --set-upstream dev origin/<branch> 將本地庫的分支與遠程庫指定分支關聯起來

註:多人協作的工作模式

1. 首先,可以試圖用 git push origin branch-name推送?自己的修改;

2. 如果推送失敗,則因為遠程分支比你的本地更新,需要先用 git pull試圖合並;

3. 如果合並有沖突,則解決沖突,並在本地提交;

4. 沒有沖突或者解決掉沖突後,再用$ git push origin branch-name推送就能成功!

5. 如果git pull提示“no tracking information”,則說明本地分支和遠程分支的鏈接關系沒有創建,用命令git branch --set-upstream branch-name origin/branch-name。

六、標簽管理

1、創建標簽

(1) $ git tag v1.0 默認給最近以此提交創建標簽

(2) $ git tag v0.9 66756 給指定的提交創建標簽,66756為提交id

(3) $ git tag -a v0.1 -m "version 0.1 released" 3628164 給指定的提交創建標簽,-a 指定標簽名,-m指定標簽信息

(4) $ git tag 列出所有標簽

(5) $ git show v0.1 查看指定標簽的具體信息

2、操作標簽

(1) $ git tag -d v0.1 刪除指定標簽

(2) $ git push origin v1.0 推送某個標簽到遠程

(3) $ git push origin --tags 一次性推送全部尚未推送到遠程的本地標簽

(4) 如果標簽已經推送到遠程,要刪除遠程標簽:

① 先從本地庫刪除:$ git tag -d v0.9

② 再從遠程庫刪除:$ git push origin :refs/tags/v0.9

Git學習筆記&總結