日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
學(xué)習(xí) Git,看這一篇就夠了!

文末抽獎(jiǎng),兩份掘金周邊等你來拿,滑動(dòng)到文末參與抽獎(jiǎng)!

創(chuàng)新互聯(lián)建站專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于成都做網(wǎng)站、網(wǎng)站建設(shè)、泌陽(yáng)網(wǎng)絡(luò)推廣、成都微信小程序、泌陽(yáng)網(wǎng)絡(luò)營(yíng)銷、泌陽(yáng)企業(yè)策劃、泌陽(yáng)品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運(yùn)營(yíng)等,從售前售中售后,我們都將竭誠(chéng)為您服務(wù),您的肯定,是我們最大的嘉獎(jiǎng);創(chuàng)新互聯(lián)建站為所有大學(xué)生創(chuàng)業(yè)者提供泌陽(yáng)建站搭建服務(wù),24小時(shí)服務(wù)熱線:18980820575,官方網(wǎng)址:www.cdcxhl.com

一、Git 基本概念

1. Git 歷史

Git 是最流行的分布式版本控制系統(tǒng)(Distributed Version Control System,簡(jiǎn)稱 DVCS)。它由 Linus Torvalds 創(chuàng)建,當(dāng)時(shí)非常需要一個(gè)快速、高效和大規(guī)模分布式的源代碼管理系統(tǒng),用于管理 Linux 源代碼。

由于 Linus 對(duì)幾乎所有現(xiàn)有的源代碼管理系統(tǒng)抱有強(qiáng)烈的反感,因此他決定編寫自己的源代碼管理系列。2005 年 4 月,Git 就誕生了。到了 2005 年 7 月,維護(hù)工作就交給了 Junio Hamano,自此他就一直在維護(hù)這個(gè)項(xiàng)目。

雖然最初只用于 Linux 內(nèi)核,但 Git 項(xiàng)目迅速傳播,并很快被用于管理許多其他 Linux 項(xiàng)目。現(xiàn)在,幾乎所有的軟件開發(fā),尤其是在開源世界中,都是通過 Git 進(jìn)行的。

2. 版本控制系統(tǒng)

版本控制是指對(duì)軟件開發(fā)過程中各種程序代碼、配置文件及說明文檔等文件變更的管理,是軟件配置管理的核心思想之一。版本控制技術(shù)是團(tuán)隊(duì)協(xié)作開發(fā)的橋梁,助力于多人協(xié)作同步進(jìn)行大型項(xiàng)目開發(fā)。軟件版本控制系統(tǒng)的核心任務(wù)就是查閱項(xiàng)目歷史操作記錄、實(shí)現(xiàn)協(xié)同開發(fā)。

常見版本控制主要有兩種:集中式版本控制和分布式版本控制。

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

集中式版本控制系統(tǒng),版本庫(kù)是集中存放在中央服務(wù)器的。工作時(shí),每個(gè)人都要先從中央服務(wù)器獲取最新的版本。完成之后,再把自己添加/修改的內(nèi)容提交到中央服務(wù)器。所有文件和歷史數(shù)據(jù)都存儲(chǔ)在中央服務(wù)器上。SVN 是最流行的集中式版本控制系統(tǒng)之一。

集中式版本控制系統(tǒng)的缺點(diǎn)就是必須聯(lián)網(wǎng)才能使用,如果使用局域網(wǎng)還好,速度會(huì)比較快。而如果是使用互聯(lián)網(wǎng),網(wǎng)速慢的話,就可能需要等待很長(zhǎng)時(shí)間。除此之外,如果中央服務(wù)器出現(xiàn)故障,那么版本控制將不可用。如果中心數(shù)據(jù)庫(kù)損壞,若數(shù)據(jù)未備份,數(shù)據(jù)就會(huì)丟失。

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

分布式版本控制系統(tǒng),每臺(tái)終端都可以保存版本庫(kù),版本庫(kù)可以不同,可以對(duì)每個(gè)版本庫(kù)進(jìn)行修改,修改完成后可以集中進(jìn)行更新。雖然它沒有中心服務(wù)器,但可以有一個(gè)備份服務(wù)器,它的功能有點(diǎn)類似于 SVN 的中央服務(wù)器,但它的作用僅是方便交換修改,而不像 SVN 那樣還要負(fù)責(zé)源代碼的管理。Git 是最流行的分布式版本控制系統(tǒng)之一。

和集中式版本控制系統(tǒng)相比,分布式版本控制系統(tǒng)的安全性要高很多,因?yàn)槊總€(gè)人電腦里都有完整的版本庫(kù),某一個(gè)人的電腦損壞不會(huì)影響到協(xié)作的其他人。

(3)SVN vs Git

Git 相較于 SVN:

  • 提交速度更快:因?yàn)樵?SVN 中需要更頻繁地提交到中央存儲(chǔ)庫(kù),所以網(wǎng)絡(luò)流量會(huì)減慢每個(gè)人的速度。而使用 Git,主要在本地存儲(chǔ)庫(kù)上工作,只需每隔一段時(shí)間才提交到中央存儲(chǔ)庫(kù)。
  • 沒有單點(diǎn)故障:使用 SVN,如果中央存儲(chǔ)庫(kù)出現(xiàn)故障,則在修復(fù)存儲(chǔ)庫(kù)之前,其他開發(fā)人員無法提交他們的代碼。使用 Git,每個(gè)開發(fā)人員都有自己的存儲(chǔ)庫(kù),因此中央存儲(chǔ)庫(kù)是否損壞并不重要。開發(fā)人員可以繼續(xù)在本地提交代碼,直到中央存儲(chǔ)庫(kù)被修復(fù),然后就可以推送他們的更改;
  • 可以離線使用:與 SVN 不同,Git 可以離線工作,即使網(wǎng)絡(luò)失去連接,也可以繼續(xù)工作而不會(huì)丟失功能。

3. Git 安裝

在Git官網(wǎng)下載、安裝即可:https://git-scm.com/download

安裝完成之后,可以使用以下命令來查看 Git 是否安裝成功:

git --version

如果安裝成功,終端會(huì)打印安裝的 Git 的版本:

4. Git 初始化

要給項(xiàng)目初始化一個(gè)Git倉(cāng)庫(kù),可以在終端中打開項(xiàng)目目錄,執(zhí)行以下命令即可:

git init

初始化之后,就會(huì)創(chuàng)建一個(gè)名為.git的新子文件夾,其中包含 Git 將用于跟蹤項(xiàng)目更改的多個(gè)文件和更多子目錄:

在使用 Git 進(jìn)行代碼管理時(shí),不希望一些文件出現(xiàn)在跟蹤列表中,比如node_modules文件。這種情況下,可以在項(xiàng)目的根目錄中創(chuàng)建一個(gè)名為.gitignore的文件,在該文件中列出要忽略的文件和文件夾,來看一個(gè)示例:

# 所有以.md結(jié)尾的文件
*.md

# lib.a不能被忽略
!lib.a

# node_modules和.vscode文件被忽略
node_modules
.vscode

# build目錄下的文件被忽略
build/

# doc目錄下的.txt文件被忽略
doc/*.txt

# doc目錄下多層目錄的所有以.pdf結(jié)尾的文件被忽略
doc/**/*.pdf

注意:以 # 符號(hào)開頭的行是注釋。

我們可以在本地克隆Git存儲(chǔ)庫(kù)上的代碼,首先要找到Git存儲(chǔ)庫(kù)上的HTTPS或SSH的地址,如下:

然后使用以下命令將遠(yuǎn)程倉(cāng)庫(kù)克隆到本地:

git clone https://github.com/facebook/react.git

5. Git 結(jié)構(gòu)和狀態(tài)

從Git的角度來看,可以在三個(gè)區(qū)域進(jìn)行文件更改:工作區(qū),暫存區(qū)和存儲(chǔ)庫(kù)。

  • 工作區(qū):本地看到的工作目錄;
  • 暫存區(qū):一般存放在.git 目錄下的 index 文件(.git/index)中,所以暫存區(qū)有時(shí)也叫作索引(index)。暫存區(qū)是一個(gè)臨時(shí)保存修改文件的地方;
  • 版本庫(kù):工作區(qū)有一個(gè)隱藏目錄.git,這個(gè)不算工作區(qū),而是 Git 的版本庫(kù),版本庫(kù)中存儲(chǔ)了很多配置信息、日志信息和文件版本信息等。

Git 工作目錄下的文件存在兩種狀態(tài):

  • untracked:未跟蹤,未被納入版本控制,即該文件沒有被Git版本管理;
  • tracked:已跟蹤,被納入版本控制,即該文件已被Git版本管理。

其中已跟蹤狀態(tài)可以細(xì)分為以下三種狀態(tài):

  • Unmodified:未修改狀態(tài)
  • Modified:已修改狀態(tài)
  • Staged:已暫存狀態(tài)

可以通過運(yùn)行以下命令來檢查當(dāng)前分支的狀態(tài):

git status

顯示結(jié)果如下:

此命令不會(huì)更改或更新任何內(nèi)容。它會(huì)打印出哪些文件被修改、暫存或未跟蹤。未跟蹤的文件是尚未添加到 git 索引的文件,而自上次提交以來已更改的文件將被視為已被 git 修改。

二、Git 入門

1. 全局配置

當(dāng)安裝Git后首先要做的就是配置所有本地存儲(chǔ)庫(kù)中使用的用戶信息。每次Git提交都會(huì)使用該用戶信息。

config 命令適用于不同的級(jí)別:

  • 本地級(jí)別:所有配置都僅限于項(xiàng)目目錄。默認(rèn)情況下, 如果未通過任何配置, 則git config將在本地級(jí)別寫入;
  • 全局級(jí)別:此配置特定于操作系統(tǒng)上的用戶,配置值位于用戶的主目錄中;
  • 系統(tǒng)級(jí)別:這些配置放在系統(tǒng)的根路徑下,它跟蹤操作系統(tǒng)上的所有用戶和所有存儲(chǔ)庫(kù)。

下面的配置均為寫入系統(tǒng)級(jí)別:

(1)設(shè)置用戶名

可以使用以下命令設(shè)置使用 Git 時(shí)的用戶名:

git config --global user.email "email"

可以使用以下命令查看設(shè)置的user.name:

git config user.email

(2)設(shè)置郵箱

可以使用以下命令設(shè)置使用 Git 時(shí)的郵箱:

git config --global user.email "email"

可以使用以下命令查看設(shè)置的 email:

git config user.email

(3)設(shè)置命令顏色

除了上述兩個(gè)基本的設(shè)置之外,還可以設(shè)置命令的顏色,以使輸出具有更高的可讀性:

git config --global color.ui auto

(4)查看所有配置

通過上面的命令設(shè)置的信息會(huì)保存在本地的.gitconfig文件中??梢允褂靡韵旅畈榭此信渲眯畔ⅲ?/p>

git config --list

如果在全局輸入這個(gè)命令,就會(huì)顯示全局的配置:

如果在使用 Git 的項(xiàng)目中輸入該命令,除了會(huì)顯示全局的配置之外,還會(huì)顯式本地倉(cāng)庫(kù)的一些配置信息,如下:

(5)設(shè)置別名

git config 命令為我們提供了一種創(chuàng)建別名的方法,這種別名通常用于縮短現(xiàn)有的命令或者創(chuàng)建自定義命令。來看一個(gè)例子:

git config --global alias.cm "commit -m"

這里為commit -m創(chuàng)建一個(gè)別名 cm,這樣在提交暫存區(qū)文件時(shí),只需要輸入以下命令即可:

git cm 

2. 分支操作

分支是源代碼控制的核心概念,它允許將工作分離到不同的分支中,這樣就可以自由地處理源代碼,而不會(huì)影響其他任何人的工作或主分支中的代碼。下面來看一些常見的分支操作。

(1)查看分支

可以使用以下命令來查看當(dāng)然所在的分支以及該項(xiàng)目所有的分支情況:

git branch

該命令可以列出項(xiàng)目所有的本地分支,顯示綠色的分支就是當(dāng)前分支:

可以使用以下命令來列出所有的遠(yuǎn)程分支:

git branch -r

可以使用以下命令來查看所有的本地分支和遠(yuǎn)程分支:

git branch -a

(2)創(chuàng)建分支

我們?cè)谟?jì)算機(jī)上只能訪問本地分支,在將分支推送到遠(yuǎn)程倉(cāng)庫(kù)之前,需要先創(chuàng)建一個(gè)本地分支。

可以使用以下命令來創(chuàng)建分支:

git checkout 

加上-b就可以在創(chuàng)建新的分支之后,直接切換到新創(chuàng)建的分支上:

git checkout -b 

如果想將新建的本地分支推送到遠(yuǎn)程倉(cāng)庫(kù),以在遠(yuǎn)程倉(cāng)庫(kù)添加這個(gè)分支??梢詧?zhí)行以下命令:

git push -u origin 

(3)刪除分支

可以使用以下命令來刪除本地分支:

git branch -d 

需要注意,在刪除分支之前,要先切換到其他分支,否則就會(huì)報(bào)錯(cuò):

切換到其他分支再刪除即可:

有時(shí) Git 會(huì)拒絕刪除本地分支,因?yàn)橐獎(jiǎng)h的分支可能有未提交的代碼。這是為了保護(hù)代碼以避免意外丟失數(shù)據(jù)??梢允褂靡韵旅顏韽?qiáng)制刪除本地分支:

git branch -D 

這樣就刪除成功了:

當(dāng)然,我們也可以刪除遠(yuǎn)程倉(cāng)庫(kù)分支,執(zhí)行以下命令即可:

git push origin --delete 

(4)合并分支

可以使用以下命令將其他分支的代碼合并到當(dāng)前分支:

git merge 

如果想將A分支合并到B分支,就要先切換到B分支,然后執(zhí)行命令:git merge A。

(5)重命名分支

可以使用以下命令來將分支重命名:

git branch -m  

如果newname名字分支已經(jīng)存在,則需要使用-M來強(qiáng)制重命名:

t branch -M  

3. 基礎(chǔ)操作

Git 數(shù)據(jù)工作流程如下:

(1)暫存文件

可以使用以下命令來暫存已修改的文件,命令最后需要指定要暫存的文件名稱:

git add 

如果想要將所有未跟蹤和修改的文件添加到暫存區(qū),可以執(zhí)行以下命令:

git add .

此時(shí)分支的狀態(tài)如下:

(2)提交暫存

可以使用以下命令將暫存區(qū)的文件修改提交到本地倉(cāng)庫(kù),

git commit -m "meaasge"

其中-m參數(shù)表示message日志信息,參數(shù)后面要加一個(gè)日志信息,用雙引號(hào)括起來。

此時(shí)分支的狀態(tài)如下:

如果上次提交暫存的messge寫錯(cuò)了怎么辦呢?可以使用使用以下命令來更新提交,而不需要撤銷并重新提交:

git commit --amend -m 

如果有一個(gè)新的文件修改,也想提交到上一個(gè)commit中,可以使用以下命令來保持相同的提交信息:

git add .
git commit --amend --no-edit

(3)存儲(chǔ)更改

假如我們正在開發(fā)迭代功能,但是還沒開發(fā)完。這時(shí)有一個(gè)緊急的bug需要修復(fù)上線??赡芫托枰袚Q到一個(gè)hotfix分支去修復(fù)bug。這時(shí)對(duì)于開發(fā)了一部分的功能創(chuàng)建提交是沒有邏輯意義的??梢允褂靡韵氯我幻顏泶鎯?chǔ)修改的內(nèi)容:

git stash
git stash push
git stash push -m ""

該命令回保存所有未提交的更改并恢復(fù)到上次提交時(shí)存儲(chǔ)庫(kù)的狀態(tài)。

當(dāng)想再次繼續(xù)開發(fā)此功能時(shí),就可以使用以下命令檢查所有存儲(chǔ):

git stash list

這時(shí)終端中就會(huì)顯示帶有時(shí)間戳的所有已經(jīng)暫存的列表??梢允褂靡韵氯我幻顏砣』厮械母模?/p>

git stash apply
git stash pop

apply 和 pop 之間的區(qū)別在于,pop 應(yīng)用了 stash 中的更改并將其也從 stash 中刪除,但 apply 即使在應(yīng)用后仍將更改保留在 stash 中。

可以使用以下任一命令應(yīng)用存儲(chǔ)列表中的第 N 個(gè)存儲(chǔ):

git stash apply stash@{N}
git stash apply

整個(gè)過程的輸出如下:

(4)合并指定提交

在不同分支之間進(jìn)行代碼合并時(shí),通常會(huì)有兩種情況:一種情況是需要另一個(gè)分支的所有代碼變動(dòng),那么就可以直接合并(git merge),另一種情況是只需要部分代碼的變動(dòng)(某幾次提交),這時(shí)就可以使用以下命令來合并指定的提交:

git cherry-pick 

建議添加 -x 標(biāo)志,因?yàn)樗鼤?huì)生成標(biāo)準(zhǔn)化的提交消息,通知用戶它是從哪里pick出來的:

git cherry-pick -x 

那么這個(gè)commit hash是從哪里來的呢?可以在需要被合并的分支上執(zhí)行以下命令:

git log

這時(shí)終端就會(huì)顯示出所有的提交信息:

這里黃色文字中commit后面的部分就是commit hash,復(fù)制即可。

(5)檢查提交

Git允許我們?cè)诒镜貦z查特定的提交。輸入以下命令就可以查看有關(guān)當(dāng)前提交的詳細(xì)信息:

git show

輸出的結(jié)構(gòu)如下,可以看到,它顯示出了上次提交的commit id、作者信息(郵箱和姓名)、提交日期、commit message、代碼diff等:

還可以使用HEAD~n語(yǔ)法或提交哈希來檢查過去的提交。使用以下命令就可以獲取往前數(shù)的第三次提交的詳細(xì)信息:

git show HEAD~3

除此之外,還可以添加一個(gè)--oneline標(biāo)志,以簡(jiǎn)化輸出信息:

git show --oneline

這樣提交信息就簡(jiǎn)潔了很多:

(6)查看貢獻(xiàn)者

可以使用以下命令來返回每個(gè)貢獻(xiàn)者的commit次數(shù)以及每次commit的commit message:

$ git shortlog

其可以添加兩個(gè)參數(shù):

  • s:省略每次 commit 的注釋,僅僅返回一個(gè)簡(jiǎn)單的統(tǒng)計(jì)。
  • n:按照 commit 數(shù)量從多到少的順利對(duì)用戶進(jìn)行排序。

加上這兩個(gè)參數(shù)之后就可以看到每個(gè)用戶中的提交次數(shù)以及排名情況:

git shortlog -sn

這樣就會(huì)顯示出該項(xiàng)目所有貢獻(xiàn)者的commit次數(shù),從上到下依次減?。?/p>

除此之外,還可以添加一個(gè)--no-merges標(biāo)志,以忽略合并提交的次數(shù):

git shortlog -sn --no-merges

4. 遠(yuǎn)程操作

(1)查看遠(yuǎn)程倉(cāng)庫(kù)

可以使用以下命令來查看遠(yuǎn)程倉(cāng)庫(kù):

git remote

該命令會(huì)列出指定的每一個(gè)遠(yuǎn)程服務(wù)器的簡(jiǎn)寫。如果已經(jīng)克隆了遠(yuǎn)程倉(cāng)庫(kù),那么至少應(yīng)該能看到 origin ,這是 Git 克隆的倉(cāng)庫(kù)服務(wù)器的默認(rèn)名字:

可以執(zhí)行以下命令來獲取遠(yuǎn)程倉(cāng)庫(kù)的地址:

git remote -v

其中fetch是獲取,push是推送:

可以使用以下命令來查看更加詳細(xì)的信息:

git remote show origin

輸出結(jié)果如下:

(2)添加遠(yuǎn)程倉(cāng)庫(kù)

可以使用以下命令來將本地項(xiàng)目鏈接到遠(yuǎn)程倉(cāng)庫(kù):

git remote add  

其中:

  • remote_name:倉(cāng)庫(kù)名稱(默認(rèn)是origin)
  • remote_url:遠(yuǎn)程倉(cāng)庫(kù)地址

該命令允許 Git 跟蹤遠(yuǎn)程存儲(chǔ)庫(kù)并將本地存儲(chǔ)庫(kù)連接到遠(yuǎn)程倉(cāng)庫(kù)。

(3)移除遠(yuǎn)程倉(cāng)庫(kù)

可以使用命令來移除遠(yuǎn)程倉(cāng)庫(kù):

git remote rm origin

需要注意,該命令只是從本地移除遠(yuǎn)程倉(cāng)庫(kù)的記錄(也就是解除本地倉(cāng)庫(kù)和遠(yuǎn)程倉(cāng)庫(kù)的關(guān)系),并不會(huì)真正影響到遠(yuǎn)程倉(cāng)庫(kù)。

(4)從遠(yuǎn)程倉(cāng)庫(kù)抓取與拉取

可以使用以下命令來從遠(yuǎn)程倉(cāng)庫(kù)獲取最新版本到本地倉(cāng)庫(kù),不會(huì)自動(dòng)merge(合并數(shù)據(jù)):

git fetch

由于該命令不會(huì)自定合并數(shù)據(jù),所以該命令執(zhí)行完后需要手動(dòng)執(zhí)行 git merge 遠(yuǎn)程分支到所在的分支。

可以使用以下命令來將遠(yuǎn)程指定分支拉取到本地指定分支上:

git pull origin <遠(yuǎn)程分支名>:<本地分支名>

使用以下命令來將遠(yuǎn)程指定分支拉取到本地當(dāng)前分支上:

git pull origin <遠(yuǎn)程分支名>

使用以下命令開將與本地當(dāng)前分支同名的遠(yuǎn)程分支拉取到本地當(dāng)前分支上:

git pull

注意:如果當(dāng)前本地倉(cāng)庫(kù)不是從遠(yuǎn)程倉(cāng)庫(kù)克隆,而是本地創(chuàng)建的倉(cāng)庫(kù),并且倉(cāng)庫(kù)中存在文件,此時(shí)再?gòu)倪h(yuǎn)程倉(cāng)庫(kù)拉取文件的時(shí)候會(huì)報(bào)錯(cuò)(fatal: refusing to merge unrelated histories ),解決此問題可以在git pull命令后加入?yún)?shù)--allow-unrelated-histories,即:

git pull --allow-unrelated-histories

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

可以使用以下命令將本地指定分支推送到遠(yuǎn)程指定分支上:

git push origin <本地分支名>:<遠(yuǎn)程分支名>

可以使用以下命令將本地指定分支推送到與本地當(dāng)前分支同名的遠(yuǎn)程分支上:

it push origin <本地分支名>

使用以下命令將本地當(dāng)前分支推送到與本地當(dāng)前分支同名的遠(yuǎn)程分支上:

git push

可以使用以下命令來將本地分支與遠(yuǎn)程同名分支相關(guān)聯(lián):

git push -u origin <本地分支名>

由于遠(yuǎn)程庫(kù)是空的,第一次推送master分支時(shí),加上了-u參數(shù),Git不但會(huì)把本地的master分支內(nèi)容推送的遠(yuǎn)程新的master分支,還會(huì)把本地的master分支和遠(yuǎn)程的master分支關(guān)聯(lián)起來,在以后的推送或者拉取時(shí)就可以簡(jiǎn)化命令為git push。

三、Git 進(jìn)階

1. 修改操作

如果只是簡(jiǎn)單地從工作目錄中手工刪除文件,運(yùn)行 git status 時(shí)就會(huì)在 Changes not staged for commit 的提示

(1)刪除文件

可以使用以下命令將文件從暫存區(qū)和工作區(qū)中刪除:

git rm 

如果刪除之前修改過并且已經(jīng)放到暫存區(qū)域的話,則必須要用強(qiáng)制刪除選項(xiàng) -f:

git rm -f 

如果想把文件從暫存區(qū)域移除,但仍然希望保留在當(dāng)前工作目錄中,換句話說,僅是從跟蹤清單中刪除,使用 --cached 選項(xiàng)即可:

git rm --cached 

可以使用以下命令進(jìn)行遞歸刪除,即如果后面跟的是一個(gè)目錄做為參數(shù),則會(huì)遞歸刪除整個(gè)目錄中的所有子目錄和文件:

git rm –r *

進(jìn)入某個(gè)目錄中,執(zhí)行此語(yǔ)句,就會(huì)刪除該目錄下的所有文件和子目錄。

(2)取消修改

取消修改有三種情況:

1)未使用 git add 將修改文件添加到暫存區(qū)這種情況下,可以使用以下命令來撤銷所有還沒有加入到緩存區(qū)的修改:

git checkout -- 

需要注意,此文件不會(huì)刪除新建的文件,因?yàn)樾陆ǖ奈募€沒加入到Git管理系統(tǒng)重,所以對(duì)Git來說事未知的,需要手動(dòng)刪除。

2)已使用 git add 將修改文件添加到暫存區(qū),未使用 git commit 提交緩存這種情況下,相當(dāng)于撤銷了 git add 命令對(duì)于文件修改的緩存:

git reset HEAD 

上面的命令可以撤銷指定文件的緩存,要想放棄所有文件的緩存,可以執(zhí)行以下命令:

git reset HEAD

需要注意,在使用此命令后,本地的修改并不會(huì)消失,而會(huì)回到第一種情況。要想撤銷本地的修改,執(zhí)行第一種情況中的命令即可。

除此之外,還可以指定返回到N次提交之前的階段,執(zhí)行以下命令即可:

git reset HEAD~N

這樣就能退回到n個(gè)版本之前,同樣不會(huì)修改本地文件的內(nèi)容,這些新的內(nèi)容會(huì)變成未更新到緩存區(qū)的狀態(tài)。

3)已使用 git commit 提交緩存這種情況下,可以使用以下命令來回退到上一次 commit 的狀態(tài):

git reset --hard HEAD^

也可以使用以下命令來回退到任意版本:

git reset --hard 

注意,使用 git log 命令來查看 git 提交歷史和 commit id。

(3)恢復(fù)刪除內(nèi)容

這是一個(gè)很重要的命令,假如你回退到某個(gè)舊版本,現(xiàn)在想恢復(fù)到新版本,又找不到新版本的commit id怎么辦?Git提供了下面的命令用來記錄每一次命令:

git reflog show HEAD
git reflog

執(zhí)行之后輸出如下:

可以看到,最左側(cè)黃色字體就是修改的commit id,根據(jù)這個(gè)id就可以將代碼恢復(fù)到對(duì)應(yīng)節(jié)點(diǎn)位置。HEAD@{n}表示HEAD更改歷史記錄,最近的操作在上面。

假如需要把代碼回退到HEAD@{5}處,可以執(zhí)行以下命令:

git reset --hard HEAD@{5}

或者執(zhí)行下面的命令:

git reset --hard 8a0fd74

需要注意,如果有任何本地修改,該命令也會(huì)將其銷毀,因此在reset之前建議使用stash將本地修改儲(chǔ)存。

2. 標(biāo)簽操作

標(biāo)簽指的是某個(gè)分支某個(gè)特定時(shí)間點(diǎn)的狀態(tài),通過標(biāo)簽可以很方便的了解到標(biāo)記時(shí)的狀態(tài)。

標(biāo)簽有兩種類型 :

  • 輕量標(biāo)簽 :只是某個(gè)commit 的引用,可以理解為是一個(gè)commit的別名;
  • 附注標(biāo)簽 :存儲(chǔ)在Git倉(cāng)庫(kù)中的一個(gè)完整對(duì)象,包含打標(biāo)簽者的名字、電子郵件地址、日期時(shí)間 以及其他的標(biāo)簽信息。它是可以被校驗(yàn)的,可以使用 GNU Privacy Guard (GPG) 簽名并驗(yàn)證。

(1)展示標(biāo)簽

可以使用以下命令來獲取所有標(biāo)簽:

git tag

它會(huì)列出所有標(biāo)簽的名稱:

可以使用以下命令來查看某一個(gè)標(biāo)簽的詳細(xì)信息:

git show 

還可以根據(jù)條件來顯示標(biāo)簽,比如列出以v1.開頭的所有tag:

git tag -l "v1."

(2)創(chuàng)建標(biāo)簽

可以使用以下命令在本地創(chuàng)建新標(biāo)簽:

git tag 

例如:

git tag v1.0.0

通常遵循的命名模式如下:

v..
  • major(主版本號(hào)):重大變化
  • minor(次要版本號(hào)):版本與先前版本兼容
  • patch(補(bǔ)丁號(hào)):bug修復(fù)

除此之外,我們還可以為特定的commit創(chuàng)建標(biāo)簽,其命令格式如下:

git tag  

以上面的的形式創(chuàng)建的標(biāo)簽都屬于輕量標(biāo)簽,下面來看看如何創(chuàng)建一個(gè)附注標(biāo)簽。

在創(chuàng)建標(biāo)簽時(shí),可以添加一個(gè)-a標(biāo)志以創(chuàng)建一個(gè)帶備注的標(biāo)簽,備注信息使用-m message來指定:

git tag  

(3)推送標(biāo)簽

標(biāo)簽創(chuàng)建完成之后就可以使用以下命令將其推送到遠(yuǎn)程倉(cāng)庫(kù):

git push origin --tags

以上命令會(huì)將本地所有tag都推送到遠(yuǎn)程倉(cāng)庫(kù)。如果想推送指定標(biāo)簽,可以執(zhí)行以下命令:

git push origin 

(4)切換標(biāo)簽

可以使用以下命令來切換標(biāo)簽:

git checkout 

(5)刪除標(biāo)簽

可以使用以下命令來刪除本地倉(cāng)庫(kù)指定標(biāo)簽:

git tag -d 

可以使用以下命令來刪除遠(yuǎn)程倉(cāng)庫(kù)指定標(biāo)簽:

git push origin :refs/tags/

也可以使用以下命令來刪除遠(yuǎn)程倉(cāng)庫(kù)的指定標(biāo)簽:

git push origin --delete 

(6)拉取標(biāo)簽

可以使用以下命令來將遠(yuǎn)程倉(cāng)庫(kù)的標(biāo)簽拉?。ㄍ剑┑疆?dāng)前分支:

git fetch --tags

(7)檢出標(biāo)簽

檢出標(biāo)簽實(shí)際上就是在標(biāo)簽的基礎(chǔ)上進(jìn)行其他開發(fā)或操作。需要以標(biāo)簽指定的版本為基礎(chǔ)版本,新建一個(gè)分支,繼續(xù)其他的操作。執(zhí)行以下命令即可:

git checkout -b  

3. 日志記錄

(1)基礎(chǔ)日志

可以使用以下命令來查看分支的歷史提交信息:

git log

這是其最基礎(chǔ)的用法,輸出如下:

可以看到,終端上輸出了該分支近期的提交記錄,它包含了所有貢獻(xiàn)者的提交。

(2)按作者查看

如果想只看某個(gè)人的提交,可以添加過濾條件:

git log --author="username"

當(dāng)然也可以搜索多個(gè)作者的提交信息,只需要在用|分隔用戶名即可,注意需要使用\來對(duì)|進(jìn)行轉(zhuǎn)義:

git log --author="username1\|usernmae2"

這里列出的是每次提交的詳細(xì)信息,如果指向看到每個(gè)提交的概要,可以在命令中添加--oneline標(biāo)志:

git log --author="username" --oneline

(3)按時(shí)間查看

除了可以按照作者來查看日志之外,還可以按照時(shí)間查看日志??梢圆榭茨硞€(gè)時(shí)間之前的日志,也可以查看某個(gè)日期之后的日志:

//某個(gè)日期之后
git log --since=
git log --after=

//某個(gè)日期之前
git log --until=
git log --before=

如果想查看某個(gè)具體時(shí)間區(qū)間之間的日志,可以組合以上參數(shù):

git log --since="2022.05.15" --until="2022.05.20"

(4)按文件查看

如果我們想查看某個(gè)文件都在哪些提交中修改了內(nèi)容,也是可以的。使用以下命令即可:

git log -- 

比如查看README.md文件的修改記錄:

(5)按合并查看

在歷史提交中可能會(huì)有很多次合并的提交記錄,想要只查看代碼合并的記錄,可以執(zhí)行以下命令:

git log --merges

如果想查看非合并操作的操作記錄,可以執(zhí)行以下命令:

git log --no-merges

(6)按分支查看

可以按照分支查看日志,如果想查看test分支比master分支多提交了哪些內(nèi)容,就可以執(zhí)行以下命令:

git log master..test

相反,如果想看master分支比test分支多提交了哪些內(nèi)容,就可以執(zhí)行以下命令:

git log test..master

(7)美化日志

git log命令可以用來查看提交歷史,此命令的問題在于,隨著項(xiàng)目復(fù)雜性的增加,輸出變得越來越難閱讀。可以使用以下命令來美化日志的輸出:

git log --graph --oneline --decorate

輸出結(jié)果如下,這樣就能看到更簡(jiǎn)潔的細(xì)分以及不同分支如何連接在一起:

(8)其他標(biāo)志

上面我們提到了,可以使用--oneline標(biāo)志來簡(jiǎn)化日志的輸出:

git log --oneline

可以使用--stat標(biāo)志來簡(jiǎn)要顯示文件增改行數(shù)統(tǒng)計(jì),每個(gè)提交都列出了修改過的文件,以及其中添加和移除的行數(shù),并在最后列出所有增減行數(shù)小計(jì):

git log --stat

可以添加-N標(biāo)志來僅顯示最近N次的提交,其中N是一個(gè)正整數(shù),例如查看最近三次提交:

git log -3

可以使用-p標(biāo)志來展開顯示每次提交的內(nèi)容差異對(duì)比:

git log -p

注意,以上這些命令標(biāo)識(shí)符都可以組合使用。

4. 差異對(duì)比

git diff 命令可以用來比較文件的不同,即比較文件在暫存區(qū)和工作區(qū)的差異。

(1)未緩存改動(dòng)

當(dāng)工作區(qū)有改動(dòng),暫存區(qū)為空時(shí), diff對(duì)比的是工作區(qū)與最后一次commit提交的共同文件;當(dāng)工作區(qū)有改動(dòng),暫存區(qū)不為空時(shí),diff對(duì)比的是工作區(qū)與暫存區(qū)的共同文件。

(2)已緩存改動(dòng)

當(dāng)已緩存改動(dòng)時(shí),可以使用以下任一命令來顯示暫存區(qū)(已a(bǔ)dd但未commit文件)和最后一次commit(HEAD)之間的所有不相同文件的差異對(duì)比:

it diff --cached
git diff --staged

(3)已緩存和未緩存改動(dòng)

可以使用以下命令來顯示工作目錄(已修改但未add文件)和暫存區(qū)(已a(bǔ)dd但未commit文件)與最后一次commit之間的的所有不相同文件的差異對(duì)比:

git diff HEAD

(4)不同分支差異

可以使用以下命令來比較兩個(gè)分支上最后 commit 的內(nèi)容的差別:

git diff <分支名1> <分支名2>

這樣就可以顯示出兩個(gè)分支的詳細(xì)差異,如果只是想看有哪些文件存在差異,可以在命令中添加--stat標(biāo)志,這樣就不會(huì)顯示每個(gè)文件的內(nèi)容的詳細(xì)對(duì)比:

git diff <分支名1> <分支名2> --stat

5. 定位問題

git bisect 可以用來查找哪一次代碼提交引入了錯(cuò)誤。它的原理很簡(jiǎn)單就是將代碼提交的歷史使用二分法來縮小出問題的代替提交范圍,確定問題出在前半部分還是后半部分,不斷執(zhí)行這個(gè)過程,直到找到引入問題的那一次提交。

其命令合適如下:

git bisect start  

其中end就是最近的提交,start就是最開始的提交。假如第一次的提交的 commit id為685f868,總共有21次提交。那么執(zhí)行以下命令,從第一次提交到最近一次提交:

git bisect start HEAD 685f868

執(zhí)行完之后,驗(yàn)證那個(gè)問題是否存在,如果發(fā)現(xiàn)問題不存在了,就執(zhí)行以下命令來標(biāo)識(shí)第11次提交是沒問題的:

git bisect good

這樣就說明前半段是沒有問題的,問題出在后半段,也就是第11-21次提交中。這時(shí)再去刷新瀏覽器,如果問題出現(xiàn)了,使用以下命令來標(biāo)記:

git bisect bad

這樣就說明第11-16次提交是有問題的。繼續(xù)重復(fù)上面的步驟,直到成功找出那一次提交位為止,這時(shí)Git就會(huì)給出如下的提示:

c8ad045 is the first bad commit

這時(shí)就確認(rèn)了是這一次提交導(dǎo)致的問題,可以去查看時(shí)那些修改導(dǎo)致的問題。

之后就可以使用以下命令退出錯(cuò)誤查找過程,回到最近一次代碼提交:

git bisect reset

四、實(shí)用 Git 工具

1. GitLens

GitLens  是一個(gè)VS Code插件,可以用來查看項(xiàng)目的提交記錄、文件修改記錄、顯示每行代碼的提交記錄等。通過豐富的可視化和強(qiáng)大的比較命令獲得有價(jià)值的見解。

2. Git History

Git History 是一個(gè)VS Code插件,增強(qiáng)了Git 的功能,它可以用來查看日志信息,查看和搜索歷史,進(jìn)行分支對(duì)比、提交對(duì)比,跨提交對(duì)比文件等。

3. Git Automator

Git Automator 是一個(gè)VS Code插件,主要用來自動(dòng)化Git提交消息和 Git 工作流程。它允許用一個(gè)快捷方式添加和提交文件。它還為提交信息提供了自動(dòng)填充功能。當(dāng)動(dòng)作很明顯時(shí),例如你刪除了一個(gè)文件,Git Automator 會(huì)猜測(cè)該動(dòng)作并將其添加到預(yù)填充的提交消息中。

4. LearnGitBranching

LearnGitBranching 是一個(gè) git 存儲(chǔ)庫(kù)可視化工具、沙箱和一系列教程和挑戰(zhàn)。它的主要目的是幫助開發(fā)人員通過可視化的力量來理解 git。這是通過不同級(jí)別的游戲來熟悉不同的git命令來實(shí)現(xiàn)的。

Github:https://github.com/pcottle/learnGitBranching


分享文章:學(xué)習(xí) Git,看這一篇就夠了!
文章位置:http://www.5511xx.com/article/codjoce.html