30分鐘精通Git,學(xué)不會(huì)來(lái)找我
2022-11-23
作者: 電子技術(shù)應(yīng)用專欄作家 一口Linux
來(lái)源:電子技術(shù)應(yīng)用專欄作家 一口Linux
一、 版本控制工具
1.1. 什么是版本控制系統(tǒng)?
版本控制系統(tǒng)(Version Control System):是一種記錄一個(gè)或若干文件內(nèi)容變化,以便將來(lái)查閱特定版本修訂情況的系統(tǒng)。版本控制系統(tǒng)不僅可以應(yīng)用于軟件源代碼的文本文件,而且可以對(duì)任何類型的文件進(jìn)行版本控制。
常見的版本控制系統(tǒng)有:cvs、svn、git
1.2. 為什么要有版本控制系統(tǒng)?
在開發(fā)過(guò)程中,經(jīng)常需要對(duì)一個(gè)文件進(jìn)行修改甚至刪除,但是我們又希望能夠保存這個(gè)文件的歷史記錄,如果通過(guò)備份,那么管理起來(lái)會(huì)非常的復(fù)雜。
在多人開發(fā)時(shí),如果需要多人合作開發(fā)一個(gè)頁(yè)面,那么修改以及合并也會(huì)非常的棘手。容易出現(xiàn)沖突。
1.3. 版本控制系統(tǒng)分類
關(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)
需要一個(gè)中央服務(wù)器來(lái)管理代碼的的版本和備份
所有的用戶電腦都是從中央服務(wù)器獲取代碼或者是將本地的代碼提交到中央服務(wù)器
依賴于網(wǎng)絡(luò)環(huán)境,如果連不上中央服務(wù)器,就無(wú)法提交和獲取代碼。
如果中央服務(wù)器宕機(jī),所有人都無(wú)法工作。
分布式版本控制系統(tǒng)
git是分布式的版本控制系統(tǒng)。
需要一臺(tái)服務(wù)器作為代碼倉(cāng)庫(kù)
每個(gè)用戶電腦都是一個(gè)服務(wù)器(代碼倉(cāng)庫(kù)),并且和代碼倉(cāng)庫(kù)是鏡像的,用戶修改和獲取代碼都是提交到自己的服務(wù)器當(dāng)中。
不需要網(wǎng)絡(luò)就可以進(jìn)行工作。
當(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安裝
下載地址
# 推薦使用國(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
在任意文件夾中,都可以使用右鍵,通過(guò)git bash here打開命令行窗口,此時(shí)的路徑就是當(dāng)前目錄。
窗口上右鍵,通過(guò)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)容都列出來(lá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. 基本操作
初始化git倉(cāng)庫(kù)git init
查看當(dāng)前git倉(cāng)庫(kù)的狀態(tài)git status
將文件添加到git的暫存區(qū)git add 文件名
將文件由暫存區(qū)提交到倉(cāng)庫(kù)區(qū)git commit -m '提交說(shuō)明'
查看提交日志git log
# 初始化git倉(cāng)庫(kù),會(huì)在當(dāng)前目錄生成一個(gè)隱藏文件夾 .git 不要去修改這個(gè)文件夾下的任意東西。
git init
# 查看git的狀態(tài) ,如果此時(shí)新建一個(gè)文件,那么這個(gè)文件是沒有被追蹤的,說(shuō)白了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 "提交說(shuō)明"
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可以通過(guò)配置從而達(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)在的你也沒啥影響。不過(guò),在某個(gè)時(shí)間點(diǎn),兩個(gè)平行宇宙合并了,結(jié)果,你既學(xué)會(huì)了Git又學(xué)會(huì)了SVN!
3.1. 為什么要有分支?
如果你要開發(fā)一個(gè)新的功能,需要2周時(shí)間,第一周你只能寫50%代碼,如果此時(shí)立即提交,代碼沒寫完,不完整的代碼會(huì)影響到別人無(wú)法工作。如果等代碼寫完再提交,代碼很容易丟失,風(fēng)險(xiǎn)很大。
有了分支,你就可以創(chuàng)建一個(gè)屬于自己的分支,別人看不到,也不影響別人,你在自己的分支上工作,提交到自己的分支上,等到功能開發(fā)完畢,一次性的合并到原來(lái)的分支。這樣既安全,又不影響他人工作。
在工作過(guò)程中,經(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í)行g(shù)it 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ù)
所有的程序員都可以通過(guò)遠(yuǎn)程倉(cāng)庫(kù)來(lái)進(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ù)獲取下來(lái)的,那么這個(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ù)。
將來(lái)工作時(shí),公司會(huì)有自己的代碼倉(cāng)庫(kù)。
github官網(wǎng)
開源中國(guó)-git 碼云
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)安裝過(guò)git客戶端,idea會(huì)進(jìn)行自動(dòng)檢測(cè),如果沒有,或者想進(jìn)行手動(dòng)調(diào)整,需要在這里重新配置。配置成功之后可以通過(guò)點(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忽略部分文件
0、安裝.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,替代上一次提交
# 如果代碼沒有任何新變化,則用來(lái)改寫上一次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),其"提交說(shuō)明"必須符合搜索條件
$ git log [tag] HEAD --grep feature
# 顯示某個(gè)文件的版本歷史,包括文件改名
$ git log --follow [file]
$ git whatchanged [file]
# 顯示指定文件相關(guān)的每一次diff
$ git log -p [file]
# 顯示過(guò)去5次提交
$ git log -5 --pretty --oneline
# 顯示所有提交過(guò)的用戶,按提交次數(shù)排序
$ git shortlog -sn
# 顯示指定文件是什么人在什么時(shí)間修改過(guò)
$ 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,用來(lái)撤銷指定commit
# 后者的所有變化都將被前者抵消,并且應(yīng)用到當(dāng)前分支
$ git revert [commit]
# 暫時(shí)將未提交的變化移除,稍后再移入
$ git stash
$ git stash pop
10、其他
# 生成一個(gè)可供發(fā)布的壓縮包
$ git archive
更多信息可以來(lái)這里獲取==>>電子技術(shù)應(yīng)用-AET<<
電子技術(shù)應(yīng)用專欄作家 一口Linux
原文鏈接:https://mp.weixin.qq.com/s/AmfOaTwtsBHWM6WZH3ETdg