Git的使用

 

建立倉庫

假設把 F:\Git\HIS 文件夾做爲倉庫,先cd 到HIS目錄:git

cd F:    #沒有/
cd Git   #若是有多級目錄,使用反斜槓/,和Linux同樣
git init  #把當前目錄初始化爲倉庫。當前目錄下會生成一個隱藏的.git文件夾

 

也能夠這樣:sql

cd F:   
git init Git  #會在指定目錄初始化爲一個倉庫,若是目錄不存在,會自動建立

 

從遠程倉把項目檢出到Git目錄下,再用git add把該項目置於Git管理下。數據庫

若是是本地項目,把項目新建到Git目錄下,或者剪切到Git目錄下,再用git add置於Git管理下。windows

 

 

 

Git有3部分

  • 工做區域(Working Directory) 平時存放項目代碼的地方
  • 暫存區域(Stage)  臨時存放改動,事實上暫存區域只是一個文件,保存即將提交的文件列表信息
  • 倉庫(Repository) 也叫作版本庫,安全存放數據的地方,裏邊有提交的全部版本的數據。提交一次就產生一個新的版

在倉庫根目錄下放項目文件(工做區域)。安全

倉庫根目錄下的.git文件夾中,index文件是暫存區域,其餘文件組成版本庫,HEAD文件指向當前版本。spa

 

 

 

 

Git使用流程

  • 對文件進行增刪改
  • 將增刪改後的文件添加到暫存區域
  • 提交到版本庫

 

好比新增了 db.sql、開發文檔.docx 2個文件命令行

git add db.sql 開發文檔.docx  #添加到暫存區域,有多個時空格分開便可。路徑相對於當前目錄

git commit -m "補上了數據庫文件、開發文檔"  #把暫存區域的內容都提交到版本庫。每次提交都會產生一個新的版本。-m指定提交說明

git commit -am "說明"   #添加、提交一步到位。a是add

 

 

git add resource  #若是是文件夾,直接寫文件夾名
git add resource/*    #也能夠這樣

git add resource/*.xml   #可使用通配符

git add .    #.表示當前目錄下的全部文件、文件夾
git add --all   #也能夠這樣寫

 

 

 

 

 

查看修改

咱們對項目進行了修改,可能一部分修改已經添加到了暫存區域,另外一部分修改還未添加到暫存區域,code

怎麼知道哪些修改被添加到了暫存區域,哪些修改沒有被添加到暫存區域? xml

git status 

標出的文件都是發生了變化的(進行了增刪改),綠色的是已添加到暫存區域,紅色的是未添加到暫存區域。blog

冒號前面是所作的修改,new file是新建的此文件,deleted是刪除了文件,modified是修改了此文件的內容。

 

 

git diff  #查看具體的修改內容。好比說你在文件中增刪了哪些字符,會給你列出來。

 

 

 

 

 

暫存區域回退

好比已經把 readme.md 添加到了暫存區域,不想提交這個修改了:

git reset HEAD readme.md  #把readme.md從暫存區域移除。若是HEAD後面未指定要移除的文件、文件夾,默認移除上一次add操做添加的。 

若是已經添加到暫存區域,又修改了文件,不用先回退再add,直接add覆蓋暫存區域中以前添加的。

 

 

 

 

查看版本庫中的版本

每次git commit都會生成一個新的項目版本,也叫作一個快照,查看版本庫中的全部版本:

git log  #查看當前及以前的全部版本

這是一個版本的信息,commit後面是版本號,HEAD表示這個是最新的版本,maste表示這是主分支。

提交者的信息、提交日期,以及提交說明-m。

 

 

  git log --pretty=oneline  # --pretty=oneline  一個版本顯示爲一行,只有版本號、提交說明

 git log --pretty=oneline --abbrev-commit   #  --abbrev-commit  版本號簡寫,簡寫的版本號和完整的效果徹底相同
 git log --graph  # --graph  查看分支合併圖


 git reflog #log只列出當前及以前的版本,若要列出所有的版本,使用reflog

 

 

 

 

 

版本回退

git reset HEAD~   #回退到當前版本的上一個版本。HEAD指向當前版本。用~、^均可以,效果同樣
git reset HEAD~3  #回退到當前版本的上3個版本,不指定數字時,默認爲1
git reset 版本號 #回退到指定版本


#以上未指定回滾類型,默認爲--mixed,將工做區的項目回滾到指定版本(這是3種參數都有的,後續再也不說明),並移除暫存區的內容(直接刪除)
#--hard 將暫存區的內容回滾到工做區間,並刪除暫存區的內容
#--soft 暫存區的內容保留,不移除(不回滾到工做區間)


#使用示例:
git reset --hard 版本號
#用法和--mixed的徹底相同


#以上回退均是版本回退,會回退全部修改過的文件、文件夾
#能夠只回退指定的文件、文件夾,在末尾指定要回退的文件、文件夾便可,示例:
git reset HEAD~ readme.md #將readme.md回退到上一個版本


git checkout readme.md #將某些文件、文件夾回滾到上一個版本,暫存區保留(不回滾)

 

 

 

 

git方式刪除文件|文件夾

直接在windows的資源管理器中刪除文件|文件夾,只是物理刪除,版本庫中關於該文件|文件夾的記錄還在,能夠回滾該文件|文件夾,刪除了也能夠恢復。

git rm 1.txt  #刪除文件
git rm -r resource  #刪除文件夾,-r表示遞歸

git上刪除文件|文件夾,是物理刪除+刪除版本庫中改文件|文件夾的相關信息,回滾版本時不會回滾該文件|文件夾。

git rm會自動把刪除操做添加到暫存區,但須要本身提交。

 

 

 

 

 分支管理

有時候須要開發某一模塊,能夠以分支的形式開發,分支、主幹同時進行開發,分支開發完成合併到主幹上。

git branch 分支名  #建立一個新分支。項目默認是master  主幹

git branch  #查看全部的分支,master會用綠色標出,前面帶一個*號

git checkout 分支名  #切換到某個分支

git checkout -b 分支名  #建立並切換到指定分支,一步到位

git merge 分支名 #把指定分支合併到當前分支中,會自動提交合並。默認使用Fast forward模式,一旦刪除分支,會丟失分支信息,也就看不出來曾經作過合併
git merge --no-ff -m "合併說明" 分支名 #--no-ff即不使用ff(fast forward模式),無論分支有沒有被刪除,在歷史版本中均可以查看到分支信息,這種用得多



git branch -d 分支名 #刪除分支。若是分支還沒有合併到主幹上,會丟失分支信息,沒法用-d刪除。-d只能刪除已合併到主幹上的分支
git branch -D 分支名 #-D 強制刪除。無論合沒合併到主幹上,均可以刪掉

 

 

 

 

 

標籤管理

每次提交都會產生一個新的版本,Git使用一長串字符做爲版本號來表示一個版本,其實也不算是版本號,只是commit id。

一串亂七八糟的字符很差閱讀,在提交大的修改後,能夠給本次提交的版本加一個標籤。

git tag v1.1  #給當前版本(最新提交的版本)加tag,tag後面指定標籤名
git tag -a v1.1 #能夠直接指定標籤名,也可使用-a來指定
git tag 標籤名 commit_id #給指定的版本加tag



git tag #查看全部的tag,只列出tag

git log #git log系列命令也會列出tag,信息更加詳細

git show 標籤名 #查看某個標籤對應版本的詳細信息,包括提交者信息、提交時間、具體修改信息等

git tag -d 標籤名 #刪除指定的標籤名。只刪除標籤。


#標籤名默認只存儲在本地版本庫中,刪除是默認也只刪除本地版本庫中的。若是要在遠程倉庫中操做標籤,還須要一些操做。
git push origin 標籤名 #推送指定的標籤到遠程倉庫。orgin是遠程倉庫的別名
git push origin --tags #推送本地版本庫中全部的標籤到遠程倉庫

git push orgin :refs/tags/標籤名 #刪除本地版本庫的標籤後,再執行此句代碼推送到遠程倉庫(同步到遠程倉庫)

 

 

 

說明

安裝Git時勾選了Unix命令風格,Linux是類Uninx系統,在Git命令行可使用Linux命令,好比pwd顯示當前目錄。

相關文章
相關標籤/搜索