【Git版本控制】Git使用教程


1.Git的綜述

 SVN是集中式版本控制系統,版本庫集中放在中央服務器上,而干活時用的都是自己的電腦,所以首先要從中央服務器哪里得到最新的版本,然后干活,干完后,需要把自己做完的活推送到中央服務器。集中式版本控制系統是必須聯網才能工作。

 Git則是分布式版本控制系統,即它就沒有中央服務器,每個人的電腦就有一個屬於自己的版本庫,這樣,工作的時候就不需要聯網了,因為版本都是在自己的電腦上。最終,各自將本地分支先合並,再將合並后的分支推向同名的遠程庫。

Git和GitHub的區別:Git是分布式版本管理工具,而GitHub是一個網站,可以在github上建立一個網上倉庫,然后提交自己的代碼到該網上倉庫,這樣你的每次提交,別人也都可以看到你的代碼,同時別人也可以幫你修改你的代碼,這種開源的方式非常方便程序員之間的交流和學習。

GitHub是一個非常適合程序員交流的網站,很多國際上的技術大牛都在github上有自己的開源代碼,其他人只要申請個賬號就可以隨意的看到這些大牛寫的程序。同時國內的很多互聯網公司如百度,阿里等也在github上公布有開源的代碼。 

工作區、本地庫、遠程庫三者之間的工作原理及流程如下圖:

 

 

2.Git本地庫管理

2.1.Git的分支管理策略

Git之所以能實現分布式版本控制,就是基於其分支管理策略。本地庫所做的操作都是在某分支上進行的,不同分支之間可以合並。可以拉取遠程分支到本地,也可以推送本地分支到遠程。

git branch <branchName> #創建新的分支

git branch -d <branchName> #刪除已有分支

git checkout <branchName> #切換到其它分支上

git merge <branchName> #合並branchName分支到當前分支上

git branch -r #查看遠程分支

git branch -a #查看遠程及本地的所有分支,當前分支前加"*"號

2.1.1.主分支master

Git的分支管理策略中,代碼庫應該有且僅有一個穩定的主分支,通常是默認的master分支。主分支上不做開發,僅用作發布新版本,故主分支也叫做版本分支。

2.1.2.開發分支develop

通常,開發應在另一個develop分支上完成。如果想正式對外發布,就在master分支上對develop分支進行"合並"(merge)。

#從master上分出一個develop分支

git checkout -b develop master 

#將develop分支合並到master分支的命令如下兩個:

#切換到master分支

git checkout master

#對develop分支進行合並

git merge --no-ff develop

【注】git checkout -b <newBranch> <originalBranch>命令從原有分支originalBranch上分出一個新分支newBranch,並切換到該分支上。

默認情況下,Git執行"快進式合並"(fast-farward merge),會直接將master分支指向develop分支。使用--no-ff參數后,會執行正常合並,在master分支上生成一個新節點,這可以清晰地保留版本演進過程。

2.2.提交文件到當前分支

工作區、暫存區以及版本庫三者之間的關系。

工作區:就是你在電腦上看到的目錄,比如目錄testgit下的所有文件(.git版本庫目錄除外)。或者以后需要再新建的目錄文件等等都屬於工作區范疇。

暫存區(stage):工作區有一個.git隱藏目錄,這個不屬於工作區,這是版本庫。其中版本庫里面存了很多東西,其中最重要的就是stage(暫存區),還有就是Git為我們自動創建的第一個master分支。

在Git中每次提交都分為兩個步驟:

第一步:用add命令將文件添加到版本庫的暫存區

第二步:用commit命令把暫存區的所有內容提交到當前分支上

3.本地庫與遠程庫之間同步

3.1.GitHub上進行SSH認證

由於本地Git倉庫和GitHub倉庫之間的傳輸是通過SSH加密的,所以必須要讓github倉庫認證你的SSH key,在此之前,必須要生成SSH key。

第一步:生成SSH Key

在windows下查看[c盤->用戶->自己的用戶名->.ssh]下是否有id_rsa、id_rsa.pub文件,如果沒有需要手動生成。打開git bash,在控制台中輸入以下命令:$ ssh-keygen -t rsa -C youremail

 參數-t用於指定密鑰類型,若未指定則默認生成用於SSH-2的RSA密鑰,這里使用的是rsa。

參數-C用來指定對該密鑰的注釋,方便用戶標識這個密鑰,指出密鑰的用途或其它的信息,這里一般輸入在GitHub上注冊時填的郵箱作為該密鑰的標識。 

第二步:登錄github,打開setting->SSH keys,點擊右上角New SSH key,把公鑰id_rsa.pub的全部內容放進key輸入框,再為當前的key起一個title來標識每個key。

3.2.由遠程庫向本地庫同步

由遠程庫向本地庫同步時遠程庫充當的是來源,本地庫充當的是去向。

3.2.1.clone命令克隆遠程庫到本地

$ git clone <遠程庫的網址>

$ git clone <版本庫的網址> <本地庫目錄名>

$ git clone –o 遠程主機名 <版本庫的網址> <本地庫目錄名>

注:該命令會在當前目錄生成一個新目錄,與遠程主機的版本庫同名。如果要指定不同的目錄名,可以將目錄名作為git clone命令的第二個參數。並在克隆的時候將遠程主機默認命名為origin,如果想用其它的遠程主機名,需要用git clone命令的-o選項指定。實例:

$ git clone -o jQuery https://github.com/jquery/jquery.git

3.2.2.拉取遠程分支到本地並建立關聯

語法:

git checkout -b 本地分支名 origin/遠程分支名

這個將會自動創建一個新的本地分支,並與指定的遠程分支關聯起來。

3.2.3.pull命令拉取遠程分支並與本地分支合並

git pull命令先拉取遠程分支到本地,再與本地指定的分支合並。

語法:$ git pull <遠程主機名> <遠程分支名>:<本地分支名>

實例:$ git pull origin next:master

如果是將遠程分支與本地當前分支合並,則冒號后面的目的分支可省略。

實例:$ git pull origin next

上面命令表示取回origin/next分支,再與當前分支合並。實質上,這等同於先做git fetch,再做git merge。

$ git fetch origin

$ git merge origin/next

【注】1.從遠程fetch到的分支在本地都是以"遠程主機名/分支名"表示的。

2.如果遠程主機刪除了本地所關聯的分支,git pull在拉取遠程分支時不會刪除所關聯的本地分支。這是為了避免,由於其他人刪除了遠程主機的分支,導致git pull時不知不覺刪除了與本地關聯的分支。

3.從遠程克隆倉庫到本地時默認給遠程主機命名為origin,可以通過選項-o來指定遠程主機名。

3.3.由本地向遠程同步

3.3.1.remote命令管理遠程主機名

為了便於管理,Git要求每個遠程主機都必須指定一個主機名。git remote命令就是用於管理遠程主機名的,這包括對遠程主機名的增、刪、改、查操作。

添加遠程主機

語法:$ git remote add <遠程主機名> <網址>

刪除遠程主機

語法:$ git remote rm <遠程主機名>

修改遠程主機名

語法:$ git remote rename <原主機名> <新主機名>

查詢遠程主機

查詢所有與本地庫關聯的遠程主機名

語法:$ git remote

查詢所有與本地庫關聯的遠程主機名及其地址

語法:$ git remote –v

實例:

origin git@github.com:jquery/jquery.git (fetch)

origin git@github.com:jquery/jquery.git (push)

查看某遠程主機的詳細信息

語法:$ git remote show <遠程主機名>

3.3.2.push命令將本地分支推送到遠程主機上

當本地分支有了更新,就需要將其推送到遠程與之關聯的分支上

語法:$ git push <遠程主機名> <本地分支名>:<遠程分支名>

如果略去了冒號后的遠程分支名,則表示將本地分支推送到遠程與之關聯的分支上;若該遠程分支不存在,則會在遠程主機新建該分支;若省略本地分支名,則表示刪除指定的遠程分支。

實例:

#推送master分支到origin主機的master分支上

$ git push origin master

#本地分支為空,表示刪除遠程的master分支

$ git push origin :master

# 等同於

$ git push origin --delete master

【注】1.從遠程向本地拉取時遠程分支是來源,由本地向遠程推送時本地分支是來源

2.由遠程向本地拉取時,若省略冒號前的來源分支(即遠程分支)則表示拉取與當前分支關聯的遠程分支進行合並;若省略冒號后的目的分支(即本地分支),則視當前分支為目的分支。但是,由本地向遠程push時,若省略冒號前的來源分支(即本地分支)則表示刪除冒號后的遠程分支。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM