更新時(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é)同工作。
**集中式版本控制系統(tǒng)**
svn/cvs都是集中式的版本控制系統(tǒng)
1.需要一個(gè)中央服務(wù)器來管理代碼的的版本和備份
2.所有的用戶電腦都是從中央服務(wù)器獲取代碼或者是將本地的代碼提交到中央服務(wù)器
3.依賴與網(wǎng)絡(luò)環(huán)境,如果連不上中央服務(wù)器,就無法提交和獲取代碼。
4.如果中央服務(wù)器宕機(jī),所有人都無法工作。
**分布式版本控制系統(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)行同步。
二、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)下圖,表示安裝成功了。
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的工作原理
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!
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分支的工作原理
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!
5.2:idea上傳項(xiàng)目到本地倉(cāng)庫(kù)
選中指定項(xiàng)目右鍵,選擇Git將項(xiàng)目添加到版本控制,然后使用Commit Directory提交項(xiàng)目到本地倉(cāng)庫(kù)。
5.3:將本地倉(cāng)庫(kù)項(xiàng)目推送到遠(yuǎn)程倉(cāng)庫(kù)
**注意:如果沒有配置ssh公鑰,第一次本地推送,需要輸入GitHub或gitee遠(yuǎn)程倉(cāng)庫(kù)用戶名密碼。**
5.4:idea設(shè)置git忽略部分文件
首先安裝.ignore插件
點(diǎn)擊File->Settings,找到Plugins搜索ignore,然后install,OK重啟idea
1、創(chuàng)建項(xiàng)目,在項(xiàng)目中添加.gitignore文件
**建議.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)目到本地
附件:命令大全
-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