首頁(yè)技術(shù)文章正文

30分鐘帶你精通git使用

更新時(shí)間:2022-11-21 來源:黑馬程序員 瀏覽量:

  一、版本控制工具

  1.1.什么是版本控制系統(tǒng)?

  版本控制系統(tǒng)(Version Control System):是一種記錄一個(gè)或若干文件內(nèi)容變化,以便將來查閱特定版本修訂情況的系統(tǒng)。版本控制系統(tǒng)不僅可以應(yīng)用于軟件源代碼的文本文件,而且可以對(duì)任何類型的文件進(jìn)行版本控制。

  常見的版本控制系統(tǒng)有:cvs、svn、git

  1.2.為什么要有版本控制系統(tǒng)?

  1.在開發(fā)過程中,經(jīng)常需要對(duì)一個(gè)文件進(jìn)行修改甚至刪除,但是我們又希望能夠保存這個(gè)文件的歷史記錄,如果通過備份,那么管理起來會(huì)非常的復(fù)雜。

  2.在多人開發(fā)時(shí),如果需要多人合作開發(fā)一個(gè)頁(yè)面,那么修改以及合并也會(huì)非常的棘手。容易出現(xiàn)沖突。

  1.3.版本控制系統(tǒng)分類

  [關(guān)于版本控制]

https://git-scm.com/book/zh/v1/起步-關(guān)于版本控制

  **本地版本控制系統(tǒng)**

  本地版本控制系統(tǒng)就是在一臺(tái)機(jī)器上,記錄版本的不同變化,保證內(nèi)容不會(huì)丟失

  缺點(diǎn):如果多人開發(fā),每個(gè)人都在不同的系統(tǒng)和電腦上開發(fā),沒辦法協(xié)同工作。

1669019675687_vcs.png

  **集中式版本控制系統(tǒng)**

  svn/cvs都是集中式的版本控制系統(tǒng)

  1.需要一個(gè)中央服務(wù)器來管理代碼的的版本和備份

  2.所有的用戶電腦都是從中央服務(wù)器獲取代碼或者是將本地的代碼提交到中央服務(wù)器

  3.依賴與網(wǎng)絡(luò)環(huán)境,如果連不上中央服務(wù)器,就無法提交和獲取代碼。

  4.如果中央服務(wù)器宕機(jī),所有人都無法工作。

1669019703959_jzs.png

  **分布式版本控制系統(tǒng)**

  git是分布式的版本控制系統(tǒng)。

  1.需要一臺(tái)服務(wù)器作為代碼倉(cāng)庫(kù)

  2.每個(gè)用戶電腦都是一個(gè)服務(wù)器(代碼倉(cāng)庫(kù)),并且和代碼倉(cāng)庫(kù)是鏡像的,用戶修改和獲取代碼都是提交到自己的服務(wù)器當(dāng)中。

  3.不需要網(wǎng)絡(luò)就可以進(jìn)行工作。

  4.當(dāng)連接網(wǎng)絡(luò)時(shí),用戶可以選擇將自己的服務(wù)器與代碼倉(cāng)庫(kù)進(jìn)行同步。

1669019725282_fbs.png

  二、git

  2.1.git介紹

  >Git是一款免費(fèi)、開源的**分布式版本控制系統(tǒng)**,用于敏捷高效地處理任何或小或大的項(xiàng)目。

  Git是Linus Torvalds為了幫助管理Linux內(nèi)核開發(fā)而開發(fā)的一個(gè)開放源碼的版本控制軟件。

  2.2.git安裝

  [下載地址]https://git-scm.com/download/win

  ```shell

  #推薦使用國(guó)內(nèi)鏡像下載http://npm.taobao.org/mirrors/git-for-windows

  1.不要安裝在中文目錄

  2.不要使用桌面管理軟件

  ```

  安裝很簡(jiǎn)單,一直下一步即可。在任意的目錄下右鍵,能夠出現(xiàn)下圖,表示安裝成功了。

1669019767970_gitinstall.png

  git用法方式主要有兩種,

  -git gui,即圖形化界面的方式

  -git bash,命令行的方式

  **bash是linux系統(tǒng)的命令,因此學(xué)習(xí)git前,我們先學(xué)習(xí)一下bash**

  1.在任意文件夾中,都可以使用右鍵,通過git bash here打開命令行窗口,此時(shí)的路徑就是當(dāng)前目錄。

  2.窗口上右鍵,通過options-->Text-->select可以調(diào)整字體的大小。

  #cd改變目錄(change directory)
  cd images#進(jìn)入images文件夾
  cd..#進(jìn)入上一層目錄
  cd~#進(jìn)入用戶根目錄
  #tab自動(dòng)補(bǔ)全,當(dāng)我們輸命令或者目錄很長(zhǎng)時(shí),可以使用tab鍵進(jìn)行自動(dòng)補(bǔ)全。
  #按兩次tab,會(huì)把所有符合要求的內(nèi)容都列出來。
  #pwd打印當(dāng)前目錄的路徑(print work directory)
  pwd
  #ls展示當(dāng)前目錄列表(list)
  ls#展示當(dāng)前目錄
  ls-a#展示全部?jī)?nèi)容,包括隱藏文件
  ls-l#以列表的形式展示內(nèi)容
  ls-al#以列表的形式展示所有的內(nèi)容,包括隱藏文件。
  ls--help#查看ls所有的參數(shù)。
  ls-l images#展示images目錄下的文件,如果沒有寫目錄,默認(rèn)展示當(dāng)前目錄。
  #clear reset清屏
  clear#清除屏幕內(nèi)容,滾動(dòng)條,保留了歷史
  reset#重置,歷史記錄沒了。
  #mkdir創(chuàng)建一個(gè)文件夾(make directory)
  mkdir css#創(chuàng)建一個(gè)css的文件夾
  mkdir css img js#創(chuàng)建了三個(gè)文件夾
  #rmdir刪除一個(gè)空的文件夾(沒啥用)
  rmdir img#刪除文件夾
  #touch創(chuàng)建文件
  touch index.html#創(chuàng)建了一個(gè)index.html文件
  touch css/index.css#在css目錄下創(chuàng)建idnex.css文件
  #rm刪除一個(gè)文件獲取文件夾
  rm index.html#刪除index.html文件
  rm js#刪除空的js文件夾
  rm-r css#遞歸刪除一個(gè)文件夾
  #mv移動(dòng)文件(move)
  mv index.html js#將html文件移動(dòng)到j(luò)s文件夾中
  mv index.html index2.html#將index.html重命名為index2.html
  #cp復(fù)制文件(cp)
  cp index.html index2.html#復(fù)制index.html文件,命名為index2.html
  cp-r css css02#如果復(fù)制的是文件夾,需要使用-r參數(shù)。
  #cat查看文件全部?jī)?nèi)容
  cat index.html
  #less查看文件部分內(nèi)容
  less index.html
  #q退出查看

  2.3.基本操作

  1.初始化git倉(cāng)庫(kù)`git init`

  2.查看當(dāng)前git倉(cāng)庫(kù)的狀態(tài)`git status`

  3.將文件添加到git的暫存區(qū)`git add文件名`

  4.將文件由暫存區(qū)提交到倉(cāng)庫(kù)區(qū)`git commit-m'提交說明'`

  5.查看提交日志`git log`

  #初始化git倉(cāng)庫(kù),會(huì)在當(dāng)前目錄生成一個(gè)隱藏文件夾.git不要去修改這個(gè)文件夾下的任意東西。
  git init
  #查看git的狀態(tài),如果此時(shí)新建一個(gè)文件,那么這個(gè)文件是沒有被追蹤的,說白了git還沒有管理這個(gè)新建的文件
  git status
  #讓git管理這個(gè)新建的文件
  git add index.html
  #讓文件由暫存區(qū)提交到倉(cāng)庫(kù)區(qū)。此時(shí)文件才真正的被git管理了。
  #如果提交日志亂碼,右鍵-->options-->Text-->將編碼改成utf-8
  git commit-m'第一次提交'
  #查看提交日志
  git log

  2.4.配置郵箱和用戶名

  如果第一次使用git,會(huì)要求設(shè)置用戶名和郵箱

  #git config user.name你的目標(biāo)用戶名
  #git config user.email你的目標(biāo)郵箱名
  #這種配置方式只有在當(dāng)前倉(cāng)庫(kù)生效
  git config user.name shuaige
  git config user.email 669104343 qq.com
  #可以使用--global參數(shù),配置全局的用戶名和郵箱,這樣別的git倉(cāng)庫(kù)就不需要重新配置了。
  #如果同時(shí)配置了局部的和全局的,那么局部的用戶名和郵箱將會(huì)生效。
  git config--global user.name shuaige
  git config--global user.email 669104343 qq.com
  #查看配置信息
  git config--list

  2.5.git的工作原理

1669019861567_gityl.png

  2.6.git命令詳解

  2.6.1.git add

       重點(diǎn)

  -作用:將文件由工作區(qū)添加到暫存區(qū),暫存文件

  -命令:

  ```git

  git add文件名

  ```

  -例如:`git add index.html`

  -`git add--all`或者`git add-A`或者`git add.`(簡(jiǎn)寫)添加所有文件

  -`git add a.txt b.txt`同時(shí)添加兩個(gè)文件

  -`git add*.js`添加當(dāng)前目錄下的所有js文件

  2.6.2.git checkout文件名

  -作用:暫存區(qū)的內(nèi)容恢復(fù)到工作區(qū)。

  -`git checkout 1.txt`將暫存區(qū)中1.txt文件恢復(fù)到工作區(qū)

  2.6.3.git commit(重點(diǎn))

  -作用:將文件由暫存區(qū)添加到倉(cāng)庫(kù)區(qū)

  -`git commit-m"提交說明"`

  2.6.4.git status

  -作用:查看文件的狀態(tài)

  -命令:`git status`

  -命令:`git stauts-s`簡(jiǎn)化日志輸出格式

  2.6.5.git log

  -作用:查看提交日志

  -`git log`只能查看當(dāng)前head以及以前的日志

  -`git log--oneline`簡(jiǎn)潔的日志信息

  -`git reflog`查看所有的提交變更日志

  2.6.6.git reset

  -作用:版本回退,將代碼恢復(fù)到已經(jīng)提交的某一個(gè)版本中。

  -`git reset--hard版本號(hào)`將代碼回退到某個(gè)指定的版本

      版本號(hào)只要有前幾位即可

  -```

  git reset--hard head~1

  ```

  將版本回退到上一次提交

  -~1:上一次提交

  -~2:上上次提交

  -~0:當(dāng)前提交

  2.7.git忽視文件

  >在倉(cāng)庫(kù)中,有些文件是不想被git管理的,比如數(shù)據(jù)的配置密碼、寫代碼的一些思路等。git可以通過配置從而達(dá)到忽視掉一些文件,這樣這些文件就可以不用提交了。

  -在倉(cāng)庫(kù)的根目錄創(chuàng)建一個(gè)`.gitignore`的文件,文件名是固定的。

  -將不需要被git管理的文件路徑添加到`.gitignore`中

#忽視idea.txt文件
  idea.txt
  #忽視.gitignore文件
  .gitignore
  #忽視css下的index.js文件
  css/index.js
  #忽視css下的所有的js文件
  css/*.js
  #忽視css下的所有文件
  css/*.*
  #忽視css文件夾
  css

  三、git分支操作

  分支就是科幻電影里面的平行宇宙,當(dāng)你正在電腦前努力學(xué)習(xí)Git的時(shí)候,另一個(gè)你正在另一個(gè)平行宇宙里努力學(xué)習(xí)SVN。

  如果兩個(gè)平行宇宙互不干擾,那對(duì)現(xiàn)在的你也沒啥影響。不過,在某個(gè)時(shí)間點(diǎn),兩個(gè)平行宇宙合并了,結(jié)果,你既學(xué)會(huì)了Git又學(xué)會(huì)了SVN!

1669019933780_fenzhi.png

  3.1.為什么要有分支?

  -如果你要開發(fā)一個(gè)新的功能,需要2周時(shí)間,第一周你只能寫50%代碼,如果此時(shí)立即提交,代碼沒寫完,不完整的代碼會(huì)影響到別人無法工作。如果等代碼寫完再提交,代碼很容易丟失,風(fēng)險(xiǎn)很大。

  -有了分支,你就可以創(chuàng)建一個(gè)屬于自己的分支,別人看不到,也不影響別人,你在自己的分支上工作,提交到自己的分支上,等到功能開發(fā)完畢,一次性的合并到原來的分支。這樣既安全,又不影響他人工作。

  -在工作過程中,經(jīng)常會(huì)碰到**多任務(wù)并行開發(fā)**的情況,使用分支就能很好的避免任務(wù)之間的影響。

  -其他版本工具比如svn,cvs中也有分支這個(gè)概念,但是這些工具中的分支操作非常的慢,形同擺設(shè)。

  3.2.分支操作的命令

  3.2.1.創(chuàng)建分支

  -`git branch分支名稱`創(chuàng)建分支,分支中的代碼,在創(chuàng)建時(shí)與當(dāng)前分支的內(nèi)容完全相同。

  -git在第一次提交時(shí),就有了一個(gè)叫`master`的主分支。

  3.2.2.查看分支

  -`git branch`可以查看所有的分支,

  -在當(dāng)前分支的前面會(huì)有一個(gè)`*`

  3.2.3.切換分支

  -`git checkout分支名稱`切換分支

  -在當(dāng)前分支的任何操作,都不會(huì)影響到其他的分支,除非進(jìn)行了分支合并。

  -切換分支之前,**必須保證代碼已經(jīng)提交了**

  3.2.4.創(chuàng)建并切換分支

  -`git checkout-b分支名稱`創(chuàng)建并切換分支

  3.2.5.刪除分支

  -`git branch-d分支名稱`可以刪除分支

  -注意:不能在當(dāng)前分支刪除當(dāng)前分支,需要切換到其他分支才能刪除。

  -注意:`master`分支是可以刪除的,但是不推薦那么做。

  3.2.6.合并分支

  -`git merge分支名稱`將其他分支的內(nèi)容合并到當(dāng)前分支。

  -在`master`分支中執(zhí)行`git merge dev`將`dev`分支中的代碼合并到`master`分支

  3.3.git分支的工作原理

1669019979788_git-branch.png

  3.4.git合并沖突

  -對(duì)于同一個(gè)文件,如果有多個(gè)分支需要合并時(shí),容易出現(xiàn)沖突。

  -合并分支時(shí),如果出現(xiàn)沖突,只能手動(dòng)處理,再次提交,一般的作法,把自己的代碼放到?jīng)_突代碼的后面即可。

  四、遠(yuǎn)程倉(cāng)庫(kù)

  所有的程序員都可以通過遠(yuǎn)程倉(cāng)庫(kù)來進(jìn)行版本的共享,達(dá)到所有人的代碼一致的效果。

  4.1.遠(yuǎn)程倉(cāng)庫(kù)相關(guān)的命令

  4.1.1.git push

  -作用:將本地代碼提交到遠(yuǎn)程倉(cāng)庫(kù)

  -`git push倉(cāng)庫(kù)地址master`在代碼提交到遠(yuǎn)程倉(cāng)庫(kù),注意master分支必須寫,不能省略

  -例子:`git push git github.com:hucongcong/test.git master`如果第一次使用,需要填寫github的用戶名和密碼

  4.1.2.git pull

  -作用:將遠(yuǎn)程的代碼下載到本地

  -`git pull代碼地址`將遠(yuǎn)程的代碼中master分支下載到本地

  -通常在push前,需要先pull一次。

  4.1.3.git clone

  -作用:克隆遠(yuǎn)程倉(cāng)庫(kù)的代碼到本地

  -`git clone倉(cāng)庫(kù)地址自定義本地倉(cāng)庫(kù)名`將整個(gè)倉(cāng)庫(kù)克隆到本地

  4.1.4.git remote

  每次push和pull操作都需要帶上遠(yuǎn)程倉(cāng)庫(kù)的地址,非常的麻煩,我們可以給倉(cāng)庫(kù)地址設(shè)置一個(gè)別名

  -```

  git remote add倉(cāng)庫(kù)別名倉(cāng)庫(kù)地址

  ```

  使用倉(cāng)庫(kù)別名替代倉(cāng)庫(kù)地址。倉(cāng)庫(kù)別名相當(dāng)于一個(gè)變量,倉(cāng)庫(kù)地址就是對(duì)應(yīng)的值。

  -`git remote add hucc git github.com:hucongcong/test.git`設(shè)置了一個(gè)hucc的倉(cāng)庫(kù)別名,以后push和pull都可以不用倉(cāng)庫(kù)地址,而用hucc

  -`git remote remove hucc`刪除hucc這個(gè)倉(cāng)庫(kù)別名。

  -`git remote`查看所有的倉(cāng)庫(kù)別名

  -如果使用了`git clone`命令從遠(yuǎn)程倉(cāng)庫(kù)獲取下來的,那么這個(gè)本地倉(cāng)庫(kù)會(huì)自動(dòng)添加一個(gè)origin的遠(yuǎn)程地址,指向的就是克隆的遠(yuǎn)程地址。

  4.2.github

  git與github沒有直接的關(guān)系。

  -git是一個(gè)版本控制工具。

  -github是一個(gè)代碼托管平臺(tái),是git的一個(gè)遠(yuǎn)程代碼倉(cāng)庫(kù)。

  -將來工作時(shí),公司會(huì)有自己的代碼倉(cāng)庫(kù)。

  [github官網(wǎng)]https://github.com/

  [開源中國(guó)-git碼云]https://git.oschina.net/

  ```bash

  1.gitHub是一個(gè)面向開源及私有軟件項(xiàng)目的托管平臺(tái),因?yàn)橹恢С謌it作為唯一的版本庫(kù)格式進(jìn)行托管,故名gitHub。

  2.github免費(fèi),代碼所有人都能看到,但是只有你自己能修改。付費(fèi)的可以隱藏。

  ```

  在github上創(chuàng)建一個(gè)項(xiàng)目,獲取到倉(cāng)庫(kù)的地址。然后就可以將本地的代碼推送到遠(yuǎn)程的服務(wù)器上。

  4.3.SSH免密碼登陸

 ?。▽?duì)稱加密與非對(duì)稱加密)

  每次push代碼,都需要輸入用戶名跟密碼,非常的麻煩。因此我們可以配置一個(gè)SSH免密碼登陸。

  -github為了賬戶的安全,需要對(duì)每一次push請(qǐng)求都要驗(yàn)證用戶的身份,只有合法的用戶才可以push

  -使用ssh可以實(shí)現(xiàn)免密碼操作(不需要使用密碼)

  4.3.1.SSH免密碼登錄配置

  -1創(chuàng)建SSH Key:`ssh-keygen-t rsa`

  -2在文件路徑`C:\用戶\當(dāng)前用戶名\`找到`.ssh`文件夾

  -3文件夾中有兩個(gè)文件:

  -私鑰:`id_rsa`

  -公鑰:`id_rsa.pub`

  -4在`github->settings->SSH and GPG keys`頁(yè)面中,新創(chuàng)建SSH key

  -5粘貼公鑰`id_rsa.pub`內(nèi)容到對(duì)應(yīng)文本框中

  -5在github中新建倉(cāng)庫(kù)或者使用現(xiàn)在倉(cāng)庫(kù),拿到`git github.com:用戶名/倉(cāng)庫(kù)名.git`

  -6此后,再次SSH方式與github“通信”,不用輸入密碼確認(rèn)身份了

  五、idea集成git

  5.1.idea配置git

  首先,確保本地已經(jīng)安裝過git客戶端,idea會(huì)進(jìn)行自動(dòng)檢測(cè),如果沒有,或者想進(jìn)行手動(dòng)調(diào)整,需要在這里重新配置。配置成功之后可以通過點(diǎn)擊Test按鈕測(cè)試是否OK!

1669020065494_image-20200623175958986.png

  5.2:idea上傳項(xiàng)目到本地倉(cāng)庫(kù)

  

1669020131758_image-20200623180341294.png

  

1669020154469_image-20200623180437271.png

  選中指定項(xiàng)目右鍵,選擇Git將項(xiàng)目添加到版本控制,然后使用Commit Directory提交項(xiàng)目到本地倉(cāng)庫(kù)。

1669020181709_image-20200623180704891.png

  

1669020211025_image-20200623181018483.png

  

1669020239786_image-20200623181335519.png

  5.3:將本地倉(cāng)庫(kù)項(xiàng)目推送到遠(yuǎn)程倉(cāng)庫(kù)

  

1669020281118_image-20200623182716981.png

  

1669020328360_image-20200623182910753.png

1669020357462_image-20200623183017270.png

  **注意:如果沒有配置ssh公鑰,第一次本地推送,需要輸入GitHub或gitee遠(yuǎn)程倉(cāng)庫(kù)用戶名密碼。**

  5.4:idea設(shè)置git忽略部分文件

  首先安裝.ignore插件

  點(diǎn)擊File->Settings,找到Plugins搜索ignore,然后install,OK重啟idea

 

1669020414578_image-20200624092240338.png

  1、創(chuàng)建項(xiàng)目,在項(xiàng)目中添加.gitignore文件

  

1669020461868_image-20200624101114402.png

  

1669020495204_image-20200624101302846.png

  

1669020521760_image-20200624101503942.png

  **建議.gitignore文件內(nèi)容**

  ######################################################################
  #Build Tools
  .gradle
  /build/
  !gradle/wrapper/gradle-wrapper.jar
  target/
  !.mvn/wrapper/maven-wrapper.jar
  ######################################################################
  #IDE
  ###STS###
  .apt_generated
  .classpath
  .factorypath
  .project
  .settings
  .springBeans
  ###IntelliJ IDEA###
  .idea
  *.iws
  *.iml
  *.ipr
  out
  gen
  ###NetBeans###
  nbproject/private/
  build/*
  nbbuild/
  dist/
  nbdist/
  .nb-gradle/
  #Others
  *.log
  *.xml.versionsBackup
  !*/build/*.java
  !*/build/*.html
  !*/build/*.xml
  #.gitignore文件內(nèi)容編寫規(guī)則
  *.a#忽略所有.a結(jié)尾的文件
  !lib.a#但lib.a除外
  /TODO#僅僅忽略項(xiàng)目根目錄下的TODO文件,不包括subdir/TODO
  build/#忽略build/目錄下的所有文件
  doc/*.txt#會(huì)忽略doc/notes.txt但不包括doc/server/arch.txt

  2、創(chuàng)建本地倉(cāng)庫(kù)

 $git init

  3、創(chuàng)建個(gè)人分支

  $git checkout-b dev

  4、添加文件到版本控制,提交到本地倉(cāng)庫(kù)

  $git add.
  $git commit-m"first commit"

  5、推送到遠(yuǎn)程倉(cāng)庫(kù)

  $git push https://gitee.com/liyunyi/ssm.git dev

  6、合并分支推送到主分支

  $git checkout master
  $git merge dev
  $git push https://gitee.com/liyunyi/ssm.git master

  5.5:克隆遠(yuǎn)程倉(cāng)庫(kù)項(xiàng)目到本地

1669020652674_image-20200623183245507.png

  

1669020687845_image-20200623183338524.png

  附件:命令大全

  -Workspace:工作區(qū)

  -Index/Stage:暫存區(qū)

  -Repository:倉(cāng)庫(kù)區(qū)(或本地倉(cāng)庫(kù))

  -Remote:遠(yuǎn)程倉(cāng)庫(kù)

  1、倉(cāng)庫(kù)

  #在當(dāng)前目錄新建一個(gè)Git代碼庫(kù)
  $git init
  #新建一個(gè)目錄,將其初始化為Git代碼庫(kù)
  $git init[project-name]
  #下載一個(gè)項(xiàng)目和它的整個(gè)代碼歷史
  $git clone[url]

  2、配置

  #顯示當(dāng)前的Git配置
  $git config--list
  #編輯Git配置文件
  $git config-e[--global]
  #設(shè)置提交代碼時(shí)的用戶信息
  $git config[--global]user.name"[name]"
  $git config[--global]user.email"[email address]"

  3、增加/刪除文件

  #添加指定文件到暫存區(qū)
  $git add[file1][file2]...
  #添加指定目錄到暫存區(qū),包括子目錄
  $git add[dir]
  #添加當(dāng)前目錄的所有文件到暫存區(qū)
  $git add.
  #添加每個(gè)變化前,都會(huì)要求確認(rèn)
  #對(duì)于同一個(gè)文件的多處變化,可以實(shí)現(xiàn)分次提交
  $git add-p
  #刪除工作區(qū)文件,并且將這次刪除放入暫存區(qū)
  $git rm[file1][file2]...
  #停止追蹤指定文件,但該文件會(huì)保留在工作區(qū)
  $git rm--cached[file]
  #改名文件,并且將這個(gè)改名放入暫存區(qū)
  $git mv[file-original][file-renamed]

  4、代碼提交

  #提交暫存區(qū)到倉(cāng)庫(kù)區(qū)
  $git commit-m[message]
  #提交暫存區(qū)的指定文件到倉(cāng)庫(kù)區(qū)
  $git commit[file1][file2]...-m[message]
  #提交工作區(qū)自上次commit之后的變化,直接到倉(cāng)庫(kù)區(qū)
  $git commit-a
  #提交時(shí)顯示所有diff信息
  $git commit-v
  #使用一次新的commit,替代上一次提交
  #如果代碼沒有任何新變化,則用來改寫上一次commit的提交信息
  $git commit--amend-m[message]
  #重做上一次commit,并包括指定文件的新變化
  $git commit--amend[file1][file2]...

  5、分支

  #列出所有本地分支
  $git branch
  #列出所有遠(yuǎn)程分支
  $git branch-r
  #列出所有本地分支和遠(yuǎn)程分支
  $git branch-a
  #新建一個(gè)分支,但依然停留在當(dāng)前分支
  $git branch[branch-name]
  #新建一個(gè)分支,并切換到該分支
  $git checkout-b[branch]
  #新建一個(gè)分支,指向指定commit
  $git branch[branch][commit]
  #新建一個(gè)分支,與指定的遠(yuǎn)程分支建立追蹤關(guān)系
  $git branch--track[branch][remote-branch]
  #切換到指定分支,并更新工作區(qū)
  $git checkout[branch-name]
  #切換到上一個(gè)分支
  $git checkout-
  #建立追蹤關(guān)系,在現(xiàn)有分支與指定的遠(yuǎn)程分支之間
  $git branch--set-upstream[branch][remote-branch]
  #合并指定分支到當(dāng)前分支
  $git merge[branch]
  #選擇一個(gè)commit,合并進(jìn)當(dāng)前分支
  $git cherry-pick[commit]
  #刪除分支
  $git branch-d[branch-name]
  #刪除遠(yuǎn)程分支
  $git push origin--delete[branch-name]
  $git branch-dr[remote/branch]

  6、標(biāo)簽

  #列出所有tag
  $git tag
  #新建一個(gè)tag在當(dāng)前commit
  $git tag[tag]
  #新建一個(gè)tag在指定commit
  $git tag[tag][commit]
  #刪除本地tag
  $git tag-d[tag]
  #刪除遠(yuǎn)程tag
  $git push origin:refs/tags/[tagName]
  #查看tag信息
  $git show[tag]
  #提交指定tag
  $git push[remote][tag]
  #提交所有tag
  $git push[remote]--tags
  #新建一個(gè)分支,指向某個(gè)tag
  $git checkout-b[branch][tag]

  7、查看信息

  #顯示有變更的文件
  $git status
  #顯示當(dāng)前分支的版本歷史
  $git log
  #顯示commit歷史,以及每次commit發(fā)生變更的文件
  $git log--stat
  #搜索提交歷史,根據(jù)關(guān)鍵詞
  $git log-S[keyword]
  #顯示某個(gè)commit之后的所有變動(dòng),每個(gè)commit占據(jù)一行
  $git log[tag]HEAD--pretty=format:%s
  #顯示某個(gè)commit之后的所有變動(dòng),其"提交說明"必須符合搜索條件
  $git log[tag]HEAD--grep feature
  #顯示某個(gè)文件的版本歷史,包括文件改名
  $git log--follow[file]
  $git whatchanged[file]
  #顯示指定文件相關(guān)的每一次diff
  $git log-p[file]
  #顯示過去5次提交
  $git log-5--pretty--oneline
  #顯示所有提交過的用戶,按提交次數(shù)排序
  $git shortlog-sn
  #顯示指定文件是什么人在什么時(shí)間修改過
  $git blame[file]
  #顯示暫存區(qū)和工作區(qū)的差異
  $git diff
  #顯示暫存區(qū)和上一個(gè)commit的差異
  $git diff--cached[file]
  #顯示工作區(qū)與當(dāng)前分支最新commit之間的差異
  $git diff HEAD
  #顯示兩次提交之間的差異
  $git diff[first-branch]...[second-branch]
  #顯示今天你寫了多少行代碼
  $git diff--shortstat" {0 day ago}"
  #顯示某次提交的元數(shù)據(jù)和內(nèi)容變化
  $git show[commit]
  #顯示某次提交發(fā)生變化的文件
  $git show--name-only[commit]
  #顯示某次提交時(shí),某個(gè)文件的內(nèi)容
  $git show[commit]:[filename]
  #顯示當(dāng)前分支的最近幾次提交
  $git reflog

  8、遠(yuǎn)程同步

  #下載遠(yuǎn)程倉(cāng)庫(kù)的所有變動(dòng)
  $git fetch[remote]
  #顯示所有遠(yuǎn)程倉(cāng)庫(kù)
  $git remote-v
  #顯示某個(gè)遠(yuǎn)程倉(cāng)庫(kù)的信息
  $git remote show[remote]
  #增加一個(gè)新的遠(yuǎn)程倉(cāng)庫(kù),并命名
  $git remote add[shortname][url]
  #取回遠(yuǎn)程倉(cāng)庫(kù)的變化,并與本地分支合并
  $git pull[remote][branch]
  #上傳本地指定分支到遠(yuǎn)程倉(cāng)庫(kù)
  $git push[remote][branch]
  #強(qiáng)行推送當(dāng)前分支到遠(yuǎn)程倉(cāng)庫(kù),即使有沖突
  $git push[remote]--force
  #推送所有分支到遠(yuǎn)程倉(cāng)庫(kù)
  $git push[remote]--all

  9、撤銷

  #恢復(fù)暫存區(qū)的指定文件到工作區(qū)
  $git checkout[file]
  #恢復(fù)某個(gè)commit的指定文件到暫存區(qū)和工作區(qū)
  $git checkout[commit][file]
  #恢復(fù)暫存區(qū)的所有文件到工作區(qū)
  $git checkout.
  #重置暫存區(qū)的指定文件,與上一次commit保持一致,但工作區(qū)不變
  $git reset[file]
  #重置暫存區(qū)與工作區(qū),與上一次commit保持一致
  $git reset--hard
  #重置當(dāng)前分支的指針為指定commit,同時(shí)重置暫存區(qū),但工作區(qū)不變
  $git reset[commit]
  #重置當(dāng)前分支的HEAD為指定commit,同時(shí)重置暫存區(qū)和工作區(qū),與指定commit一致
  $git reset--hard[commit]
  #重置當(dāng)前HEAD為指定commit,但保持暫存區(qū)和工作區(qū)不變
  $git reset--keep[commit]
  #新建一個(gè)commit,用來撤銷指定commit
  #后者的所有變化都將被前者抵消,并且應(yīng)用到當(dāng)前分支
  $git revert[commit]
  #暫時(shí)將未提交的變化移除,稍后再移入
  $git stash
  $git stash pop

  10、其他

  #生成一個(gè)可供發(fā)布的壓縮包
  $git archive

  #參考網(wǎng)址

  #git大全
  https://gitee.com/all-about-git
  #深入淺出git教程
  https://www.cnblogs.com/syp172654682/p/7689328.html
  #阮一峰git教程
  https://www.liaoxuefeng.com/wiki/896043488029600
  #idea中.ignore忽略提交文件到Git的使用
  https://blog.csdn.net/byy8023/article/details/82259155?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase


分享到:
在線咨詢 我要報(bào)名
和我們?cè)诰€交談!