日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

Git 不用背,這篇文章幫助你簡化 Git 的學習過程

來源: 責編: 時間:2024-02-29 14:40:12 168觀看
導讀當你學習 Git 時,可能會被其龐大的命令集和各種概念所嚇到。但實際上,Git 并不要求死記硬背每一個命令,更重要的是理解其工作流程和使用場景。這篇文章的目的就是幫助你簡化 Git 的學習過程,讓你發(fā)現(xiàn) Git 其實并不需要刻

YYQ28資訊網(wǎng)——每日最新資訊28at.com

當你學習 Git 時,可能會被其龐大的命令集和各種概念所嚇到。但實際上,Git 并不要求死記硬背每一個命令,更重要的是理解其工作流程和使用場景。這篇文章的目的就是幫助你簡化 Git 的學習過程,讓你發(fā)現(xiàn) Git 其實并不需要刻意去背,只需要真正理解它,就能輕松掌握。現(xiàn)在,就讓我們一起踏上探索 Git 世界的旅程吧!YYQ28資訊網(wǎng)——每日最新資訊28at.com

YYQ28資訊網(wǎng)——每日最新資訊28at.com

Git 基本概念

1. Git 歷史

Git 是最流行的分布式版本控制系統(tǒng)(Distributed Version Control System,簡稱 DVCS)。它由 Linus Torvalds 創(chuàng)建,當時非常需要一個快速、高效和大規(guī)模分布式的源代碼管理系統(tǒng),用于管理 Linux 源代碼。YYQ28資訊網(wǎng)——每日最新資訊28at.com

由于 Linus 對幾乎所有現(xiàn)有的源代碼管理系統(tǒng)抱有強烈的反感,因此他決定編寫自己的源代碼管理系列。2005 年 4 月,Git 就誕生了。到了 2005 年 7 月,維護工作就交給了 Junio Hamano,自此他就一直在維護這個項目。YYQ28資訊網(wǎng)——每日最新資訊28at.com

雖然最初只用于 Linux 內(nèi)核,但 Git 項目迅速傳播,并很快被用于管理許多其他 Linux 項目?,F(xiàn)在,幾乎所有的軟件開發(fā),尤其是在開源世界中,都是通過 Git 進行的。YYQ28資訊網(wǎng)——每日最新資訊28at.com

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

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

常見版本控制主要有兩種:集中式版本控制和分布式版本控制。YYQ28資訊網(wǎng)——每日最新資訊28at.com

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

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

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

YYQ28資訊網(wǎng)——每日最新資訊28at.com

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

分布式版本控制系統(tǒng),每臺終端都可以保存版本庫,版本庫可以不同,可以對每個版本庫進行修改,修改完成后可以集中進行更新。雖然它沒有中心服務器,但可以有一個備份服務器,它的功能有點類似于 SVN 的中央服務器,但它的作用僅是方便交換修改,而不像 SVN 那樣還要負責源代碼的管理。Git 是最流行的分布式版本控制系統(tǒng)之一。YYQ28資訊網(wǎng)——每日最新資訊28at.com

和集中式版本控制系統(tǒng)相比,分布式版本控制系統(tǒng)的安全性要高很多,因為每個人電腦里都有完整的版本庫,某一個人的電腦損壞不會影響到協(xié)作的其他人。YYQ28資訊網(wǎng)——每日最新資訊28at.com

YYQ28資訊網(wǎng)——每日最新資訊28at.com

(3)SVN vs Git

Git 相較于 SVN:YYQ28資訊網(wǎng)——每日最新資訊28at.com

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

YYQ28資訊網(wǎng)——每日最新資訊28at.com

3. Git 安裝

在Git官網(wǎng)下載、安裝即可:https://git-scm.com/download。YYQ28資訊網(wǎng)——每日最新資訊28at.com

YYQ28資訊網(wǎng)——每日最新資訊28at.com

安裝完成之后,可以使用以下命令來查看 Git 是否安裝成功:YYQ28資訊網(wǎng)——每日最新資訊28at.com

git --version

如果安裝成功,終端會打印安裝的 Git 的版本:YYQ28資訊網(wǎng)——每日最新資訊28at.com

YYQ28資訊網(wǎng)——每日最新資訊28at.com

4. Git 初始化

要給項目初始化一個Git倉庫,可以在終端中打開項目目錄,執(zhí)行以下命令即可:YYQ28資訊網(wǎng)——每日最新資訊28at.com

git init

初始化之后,就會創(chuàng)建一個名為.git的新子文件夾,其中包含 Git 將用于跟蹤項目更改的多個文件和更多子目錄:YYQ28資訊網(wǎng)——每日最新資訊28at.com

YYQ28資訊網(wǎng)——每日最新資訊28at.com

在使用 Git 進行代碼管理時,不希望一些文件出現(xiàn)在跟蹤列表中,比如node_modules文件。這種情況下,可以在項目的根目錄中創(chuàng)建一個名為.gitignore的文件,在該文件中列出要忽略的文件和文件夾,來看一個示例:YYQ28資訊網(wǎng)——每日最新資訊28at.com

# 所有以.md結尾的文件*.md  # lib.a不能被忽略!lib.a# node_modules和.vscode文件被忽略node_modules.vscode# build目錄下的文件被忽略build/# doc目錄下的.txt文件被忽略doc/*.txt# doc目錄下多層目錄的所有以.pdf結尾的文件被忽略doc/**/*.pdf

注意:以 # 符號開頭的行是注釋。YYQ28資訊網(wǎng)——每日最新資訊28at.com

我們可以在本地克隆Git存儲庫上的代碼,首先要找到Git存儲庫上的HTTPS或SSH的地址,如下:YYQ28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片YYQ28資訊網(wǎng)——每日最新資訊28at.com

然后使用以下命令將遠程倉庫克隆到本地:YYQ28資訊網(wǎng)——每日最新資訊28at.com

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

5. Git 結構和狀態(tài)

從Git的角度來看,可以在三個區(qū)域進行文件更改:工作區(qū),暫存區(qū)和存儲庫。YYQ28資訊網(wǎng)——每日最新資訊28at.com

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

YYQ28資訊網(wǎng)——每日最新資訊28at.com

Git 工作目錄下的文件存在兩種狀態(tài):YYQ28資訊網(wǎng)——每日最新資訊28at.com

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

其中已跟蹤狀態(tài)可以細分為以下三種狀態(tài):YYQ28資訊網(wǎng)——每日最新資訊28at.com

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

可以通過運行以下命令來檢查當前分支的狀態(tài):YYQ28資訊網(wǎng)——每日最新資訊28at.com

git status

顯示結果如下:YYQ28資訊網(wǎng)——每日最新資訊28at.com

YYQ28資訊網(wǎng)——每日最新資訊28at.com

此命令不會更改或更新任何內(nèi)容。它會打印出哪些文件被修改、暫存或未跟蹤。未跟蹤的文件是尚未添加到 git 索引的文件,而自上次提交以來已更改的文件將被視為已被 git 修改。YYQ28資訊網(wǎng)——每日最新資訊28at.com

Git 入門

1. 全局配置

當安裝Git后首先要做的就是配置所有本地存儲庫中使用的用戶信息。每次Git提交都會使用該用戶信息。YYQ28資訊網(wǎng)——每日最新資訊28at.com

config 命令適用于不同的級別:YYQ28資訊網(wǎng)——每日最新資訊28at.com

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

下面的配置均為寫入系統(tǒng)級別:YYQ28資訊網(wǎng)——每日最新資訊28at.com

(1)設置用戶名

可以使用以下命令設置使用 Git 時的用戶名:YYQ28資訊網(wǎng)——每日最新資訊28at.com

git config --global user.name "name"

可以使用以下命令查看設置的user.name:YYQ28資訊網(wǎng)——每日最新資訊28at.com

git config user.name

(2)設置郵箱

可以使用以下命令設置使用 Git 時的郵箱:YYQ28資訊網(wǎng)——每日最新資訊28at.com

git config --global user.email "email"

可以使用以下命令查看設置的 email:YYQ28資訊網(wǎng)——每日最新資訊28at.com

git config user.email

(3)設置命令顏色

除了上述兩個基本的設置之外,還可以設置命令的顏色,以使輸出具有更高的可讀性:YYQ28資訊網(wǎng)——每日最新資訊28at.com

git config --global color.ui auto

(4)查看所有配置

通過上面的命令設置的信息會保存在本地的.gitconfig文件中。可以使用以下命令查看所有配置信息:YYQ28資訊網(wǎng)——每日最新資訊28at.com

git config --list

如果在全局輸入這個命令,就會顯示全局的配置:YYQ28資訊網(wǎng)——每日最新資訊28at.com

YYQ28資訊網(wǎng)——每日最新資訊28at.com

如果在使用 Git 的項目中輸入該命令,除了會顯示全局的配置之外,還會顯式本地倉庫的一些配置信息,如下:YYQ28資訊網(wǎng)——每日最新資訊28at.com

YYQ28資訊網(wǎng)——每日最新資訊28at.com

(5)設置別名

git config 命令為我們提供了一種創(chuàng)建別名的方法,這種別名通常用于縮短現(xiàn)有的命令或者創(chuàng)建自定義命令。來看一個例子:YYQ28資訊網(wǎng)——每日最新資訊28at.com

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

這里為commit -m創(chuàng)建一個別名 cm,這樣在提交暫存區(qū)文件時,只需要輸入以下命令即可:YYQ28資訊網(wǎng)——每日最新資訊28at.com

git cm <message>

2. 分支操作

分支是源代碼控制的核心概念,它允許將工作分離到不同的分支中,這樣就可以自由地處理源代碼,而不會影響其他任何人的工作或主分支中的代碼。下面來看一些常見的分支操作。YYQ28資訊網(wǎng)——每日最新資訊28at.com

(1)查看分支

可以使用以下命令來查看當然所在的分支以及該項目所有的分支情況:YYQ28資訊網(wǎng)——每日最新資訊28at.com

git branch

該命令可以列出項目所有的本地分支,顯示綠色的分支就是當前分支:YYQ28資訊網(wǎng)——每日最新資訊28at.com

YYQ28資訊網(wǎng)——每日最新資訊28at.com

可以使用以下命令來列出所有的遠程分支:YYQ28資訊網(wǎng)——每日最新資訊28at.com

git branch -r

YYQ28資訊網(wǎng)——每日最新資訊28at.com

可以使用以下命令來查看所有的本地分支和遠程分支:YYQ28資訊網(wǎng)——每日最新資訊28at.com

git branch -a

YYQ28資訊網(wǎng)——每日最新資訊28at.com

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

我們在計算機上只能訪問本地分支,在將分支推送到遠程倉庫之前,需要先創(chuàng)建一個本地分支。YYQ28資訊網(wǎng)——每日最新資訊28at.com

可以使用以下命令來創(chuàng)建分支:YYQ28資訊網(wǎng)——每日最新資訊28at.com

git checkout <branch>

加上-b就可以在創(chuàng)建新的分支之后,直接切換到新創(chuàng)建的分支上:YYQ28資訊網(wǎng)——每日最新資訊28at.com

git checkout -b <branch>

如果想將新建的本地分支推送到遠程倉庫,以在遠程倉庫添加這個分支。可以執(zhí)行以下命令:YYQ28資訊網(wǎng)——每日最新資訊28at.com

git push -u origin <branch>

(3)刪除分支

可以使用以下命令來刪除本地分支YYQ28資訊網(wǎng)——每日最新資訊28at.com

git branch -d <branch>

需要注意,在刪除分支之前,要先切換到其他分支,否則就會報錯:YYQ28資訊網(wǎng)——每日最新資訊28at.com

YYQ28資訊網(wǎng)——每日最新資訊28at.com

切換到其他分支再刪除即可:YYQ28資訊網(wǎng)——每日最新資訊28at.com

YYQ28資訊網(wǎng)——每日最新資訊28at.com

有時 Git 會拒絕刪除本地分支,因為要刪的分支可能有未提交的代碼。這是為了保護代碼以避免意外丟失數(shù)據(jù)。可以使用以下命令來強制刪除本地分支YYQ28資訊網(wǎng)——每日最新資訊28at.com

git branch -D <branch>

這樣就刪除成功了:YYQ28資訊網(wǎng)——每日最新資訊28at.com

YYQ28資訊網(wǎng)——每日最新資訊28at.com

當然,我們也可以刪除遠程倉庫分支,執(zhí)行以下命令即可:YYQ28資訊網(wǎng)——每日最新資訊28at.com

git push origin --delete <name>

(4)重命名分支

可以使用以下命令來將分支重命名:YYQ28資訊網(wǎng)——每日最新資訊28at.com

git branch -m <oldname> <newname>

如果newname名字分支已經(jīng)存在,則需要使用-M來強制重命名:YYQ28資訊網(wǎng)——每日最新資訊28at.com

git branch -M <oldname> <newname>

(5)合并分支(git merge)

可以使用以下命令將其他分支的代碼合并到當前分支:YYQ28資訊網(wǎng)——每日最新資訊28at.com

git merge <branch>

如果想將A分支合并到B分支,就要先切換到B分支,然后執(zhí)行命令:git merge A。YYQ28資訊網(wǎng)——每日最新資訊28at.com

(6)合并分支(git rebase)

git rebase 用于將一個分支的提交記錄合并到另一個分支上。YYQ28資訊網(wǎng)——每日最新資訊28at.com

原理: 通過找到兩個分支的最近共同祖先,然后提取當前分支相對于該祖先的歷次提交,保存為臨時文件。接著,將當前分支指向目標分支的最新提交,最后依序應用之前保存的修改。這樣,就可以將一個分支上的修改“移動”到另一個分支上,實現(xiàn)代碼的整合。YYQ28資訊網(wǎng)——每日最新資訊28at.com

使用git rebase的步驟如下:YYQ28資訊網(wǎng)——每日最新資訊28at.com

  • 確保在正確的分支上,并且該分支已經(jīng)與遠程分支同步??梢允褂胓it checkout命令切換到目標分支,并使用git pull命令拉取最新的代碼。
  • 執(zhí)行git rebase命令,并指定要合并的分支。例如,如果你想要將當前分支的提交記錄合并到名為feature的分支上,可以執(zhí)行git rebase feature命令。
  • Git會開始分析兩個分支的提交記錄,并嘗試自動合并它們。如果出現(xiàn)沖突,你需要手動解決沖突,并使用git add命令標記已解決的文件。然后,使用git rebase --continue命令繼續(xù)合并過程。
  • 如果在合并過程中遇到無法自動解決的沖突,可以使用git rebase --abort命令中止合并,并返回到原來的狀態(tài)。
  • 一旦所有提交記錄都成功合并,可以使用git push命令將更改推送到遠程倉庫。

假設有一個名為feature的分支,它包含了一些新功能的開發(fā)代碼。同時,還有一個名為master的主分支,用于發(fā)布穩(wěn)定版本的代碼?,F(xiàn)在,想要將feature分支上的代碼合并到master分支上。首先,切換到master分支,并拉取最新的代碼:YYQ28資訊網(wǎng)——每日最新資訊28at.com

git checkout master  git pull origin master

然后,執(zhí)行rebase命令,將feature分支的提交記錄合并到master分支上:YYQ28資訊網(wǎng)——每日最新資訊28at.com

git rebase feature

Git會開始分析兩個分支的提交記錄,并嘗試自動合并它們。如果出現(xiàn)沖突,需要手動解決沖突,并使用git add命令標記已解決的文件。例如,假設在合并過程中出現(xiàn)了一個名為conflict.txt的文件沖突,你可以使用文本編輯器打開該文件,解決沖突,然后執(zhí)行以下命令:YYQ28資訊網(wǎng)——每日最新資訊28at.com

git add conflict.txt  git rebase --continue

一旦所有沖突都解決并且所有提交記錄都成功合并,可以使用git push命令將更改推送到遠程倉庫:YYQ28資訊網(wǎng)——每日最新資訊28at.com

git push origin master

這樣就成功地將feature分支上的代碼合并到了master分支上,并保持了提交歷史的清晰和整潔。YYQ28資訊網(wǎng)——每日最新資訊28at.com

git rebase和git merge都是用于將不同分支的代碼整合到一起的Git命令,但它們在實現(xiàn)方式、結果和適用場景上有一些區(qū)別。YYQ28資訊網(wǎng)——每日最新資訊28at.com

  • 實現(xiàn)方式:git merge是通過找到兩個分支的最佳同源合并點,將兩個分支中的所有提交都合并到一起,并創(chuàng)建一個新的合并提交。而git rebase則是通過找到兩個分支的最近共同祖先,提取當前分支相對于該祖先的歷次提交,然后將當前分支指向目標分支的最新提交,最后依序應用之前保存的修改。
  • 結果:從最終效果來看,git merge和git rebase都是將不同分支的代碼融合在一起。但是,它們生成的代碼樹稍有不同。git merge會生成一個新的合并點,保留了歷史記錄中的多個分支合并點,使得歷史記錄更加復雜。而git rebase則會將提交歷史“拉直”,使得提交歷史看起來像是一條直線,沒有分叉,歷史記錄更加簡潔。
  • 適用場景:git merge適用于保留完整的提交歷史,因為它保留了每個分支的合并點,有助于追蹤歷史記錄。它是更為保守的合并方法,相對簡單。而git rebase適用于追求整潔的提交歷史,因為它通過重寫歷史記錄來避免不必要的合并提交和分叉。然而,使用rebase時需要更多的注意力和精細的操作,因為它可能導致原有的提交變得不可用。

3. 基礎操作

Git 數(shù)據(jù)工作流程如下:YYQ28資訊網(wǎng)——每日最新資訊28at.com

YYQ28資訊網(wǎng)——每日最新資訊28at.com

(1)暫存文件

可以使用以下命令來暫存已修改的文件,命令最后需要指定要暫存的文件名稱:YYQ28資訊網(wǎng)——每日最新資訊28at.com

git add <filename>

如果想要將所有未跟蹤和修改的文件添加到暫存區(qū),可以執(zhí)行以下命令:YYQ28資訊網(wǎng)——每日最新資訊28at.com

git add .

此時分支的狀態(tài)如下:YYQ28資訊網(wǎng)——每日最新資訊28at.com

YYQ28資訊網(wǎng)——每日最新資訊28at.com

(2)提交暫存

可以使用以下命令將暫存區(qū)的文件修改提交到本地倉庫,YYQ28資訊網(wǎng)——每日最新資訊28at.com

git commit -m "meaasge"

其中-m參數(shù)表示message日志信息,參數(shù)后面要加一個日志信息,用雙引號括起來。YYQ28資訊網(wǎng)——每日最新資訊28at.com

此時分支的狀態(tài)如下:YYQ28資訊網(wǎng)——每日最新資訊28at.com

YYQ28資訊網(wǎng)——每日最新資訊28at.com

如果上次提交暫存的messge寫錯了怎么辦呢?可以使用使用以下命令來更新提交,而不需要撤銷并重新提交:YYQ28資訊網(wǎng)——每日最新資訊28at.com

git commit --amend -m <message>

如果有一個新的文件修改,也想提交到上一個commit中,可以使用以下命令來保持相同的提交信息:YYQ28資訊網(wǎng)——每日最新資訊28at.com

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

(3)存儲更改

假如我們正在開發(fā)迭代功能,但是還沒開發(fā)完。這時有一個緊急的bug需要修復上線??赡芫托枰袚Q到一個hotfix分支去修復bug。這時對于開發(fā)了一部分的功能創(chuàng)建提交是沒有邏輯意義的??梢允褂靡韵氯我幻顏泶鎯π薷牡膬?nèi)容:YYQ28資訊網(wǎng)——每日最新資訊28at.com

git stashgit stash pushgit stash push -m "<stash message>"

該命令回保存所有未提交的更改并恢復到上次提交時存儲庫的狀態(tài)。YYQ28資訊網(wǎng)——每日最新資訊28at.com

當想再次繼續(xù)開發(fā)此功能時,就可以使用以下命令檢查所有存儲:YYQ28資訊網(wǎng)——每日最新資訊28at.com

git stash list

這時終端中就會顯示帶有時間戳的所有已經(jīng)暫存的列表??梢允褂靡韵氯我幻顏砣』厮械母模?span style="display:none">YYQ28資訊網(wǎng)——每日最新資訊28at.com

git stash applygit stash pop

apply 和 pop 之間的區(qū)別在于,pop 應用了 stash 中的更改并將其也從 stash 中刪除,但 apply 即使在應用后仍將更改保留在 stash 中。YYQ28資訊網(wǎng)——每日最新資訊28at.com

可以使用以下任一命令應用存儲列表中的第 N 個存儲:YYQ28資訊網(wǎng)——每日最新資訊28at.com

git stash apply stash@{N}git stash apply <n>

整個過程的輸出如下:YYQ28資訊網(wǎng)——每日最新資訊28at.com

YYQ28資訊網(wǎng)——每日最新資訊28at.com

(4)合并指定提交

在不同分支之間進行代碼合并時,通常會有兩種情況:一種情況是需要另一個分支的所有代碼變動,那么就可以直接合并(git merge),另一種情況是只需要部分代碼的變動(某幾次提交),這時就可以使用以下命令來合并指定的提交:YYQ28資訊網(wǎng)——每日最新資訊28at.com

git cherry-pick <commit hash>

建議添加 -x 標志,因為它會生成標準化的提交消息,通知用戶它是從哪里pick出來的:YYQ28資訊網(wǎng)——每日最新資訊28at.com

git cherry-pick -x <commit hash>

那么這個commit hash是從哪里來的呢?可以在需要被合并的分支上執(zhí)行以下命令:YYQ28資訊網(wǎng)——每日最新資訊28at.com

git log

這時終端就會顯示出所有的提交信息:YYQ28資訊網(wǎng)——每日最新資訊28at.com

YYQ28資訊網(wǎng)——每日最新資訊28at.com

這里黃色文字中commit后面的部分就是commit hash,復制即可。YYQ28資訊網(wǎng)——每日最新資訊28at.com

(5)檢查提交

Git允許我們在本地檢查特定的提交。輸入以下命令就可以查看有關當前提交的詳細信息:YYQ28資訊網(wǎng)——每日最新資訊28at.com

git show

輸出的結構如下,可以看到,它顯示出了上次提交的commit id、作者信息(郵箱和姓名)、提交日期、commit message、代碼diff等:YYQ28資訊網(wǎng)——每日最新資訊28at.com

YYQ28資訊網(wǎng)——每日最新資訊28at.com

還可以使用HEAD~n語法或提交哈希來檢查過去的提交。使用以下命令就可以獲取往前數(shù)的第三次提交的詳細信息:YYQ28資訊網(wǎng)——每日最新資訊28at.com

git show HEAD~3

除此之外,還可以添加一個--oneline標志,以簡化輸出信息:YYQ28資訊網(wǎng)——每日最新資訊28at.com

git show --oneline

這樣提交信息就簡潔了很多:YYQ28資訊網(wǎng)——每日最新資訊28at.com

YYQ28資訊網(wǎng)——每日最新資訊28at.com

(6)查看貢獻者

可以使用以下命令來返回每個貢獻者的commit次數(shù)以及每次commit的commit message:YYQ28資訊網(wǎng)——每日最新資訊28at.com

$ git shortlog

其可以添加兩個參數(shù):YYQ28資訊網(wǎng)——每日最新資訊28at.com

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

加上這兩個參數(shù)之后就可以看到每個用戶中的提交次數(shù)以及排名情況:YYQ28資訊網(wǎng)——每日最新資訊28at.com

git shortlog -sn

這樣就會顯示出該項目所有貢獻者的commit次數(shù),從上到下依次減?。?span style="display:none">YYQ28資訊網(wǎng)——每日最新資訊28at.com

YYQ28資訊網(wǎng)——每日最新資訊28at.com

除此之外,還可以添加一個--no-merges標志,以忽略合并提交的次數(shù):YYQ28資訊網(wǎng)——每日最新資訊28at.com

git shortlog -sn --no-merges

(7)倉庫提交歷史

git rev-list 用于列出倉庫中的提交(commit)記錄。它按照時間倒序顯示提交記錄,并可以根據(jù)不同的選項和參數(shù)進行篩選和排序。YYQ28資訊網(wǎng)——每日最新資訊28at.com

下面是git rev-list的一些基本用法:YYQ28資訊網(wǎng)——每日最新資訊28at.com

列出所有提交記錄:YYQ28資訊網(wǎng)——每日最新資訊28at.com

git rev-list

這將顯示倉庫中所有的提交記錄,按照時間倒序排列。每個提交記錄都有一個唯一的SHA-1哈希值作為標識。YYQ28資訊網(wǎng)——每日最新資訊28at.com

列出某個分支的提交記錄:YYQ28資訊網(wǎng)——每日最新資訊28at.com

git rev-list <branch-name>

將<branch-name>替換為你要查看的分支的名稱。這將顯示該分支上的所有提交記錄。YYQ28資訊網(wǎng)——每日最新資訊28at.com

列出某個提交之后的提交記錄:YYQ28資訊網(wǎng)——每日最新資訊28at.com

git rev-list <commit-id>..

將<commit-id>替換為你要查看的提交的SHA-1哈希值。這將顯示該提交之后的所有提交記錄。YYQ28資訊網(wǎng)——每日最新資訊28at.com

列出兩個提交之間的提交記錄:YYQ28資訊網(wǎng)——每日最新資訊28at.com

git rev-list <commit-id1>..<commit-id2>

將<commit-id1>和<commit-id2>替換為你要查看的兩個提交的SHA-1哈希值。這將顯示從<commit-id1>到<commit-id2>之間的所有提交記錄。YYQ28資訊網(wǎng)——每日最新資訊28at.com

列出某個文件的所有提交記錄:YYQ28資訊網(wǎng)——每日最新資訊28at.com

bash復制代碼git rev-list -- <file-path>

將<file-path>替換為你要查看的文件的路徑。這將顯示涉及該文件的所有提交記錄。YYQ28資訊網(wǎng)——每日最新資訊28at.com

(8)添加注釋或備注

git notes允許用戶為Git對象(如提交、樹、標簽等)添加注釋或備注信息。這些注釋信息是以鍵值對的形式存儲的,其中鍵是一個唯一的引用,而值則是與該引用關聯(lián)的注釋內(nèi)容。YYQ28資訊網(wǎng)——每日最新資訊28at.com

要使用git notes,可以按照以下步驟進行操作:YYQ28資訊網(wǎng)——每日最新資訊28at.com

添加注釋:使用git notes add -m "Your note message" <object>命令向一個對象添加注釋。例如,要向提交abc123添加注釋,可以執(zhí)行git notes add -m "This is a note for commit abc123" abc123。YYQ28資訊網(wǎng)——每日最新資訊28at.com

  • 顯示注釋:使用git notes show <object>命令顯示一個對象的注釋內(nèi)容。例如,要顯示提交abc123的注釋,可以執(zhí)行git notes show abc123。
  • 編輯注釋:如果要編輯已存在的注釋,可以使用git notes edit <object>命令。這將打開文本編輯器,允許編輯已存在的注釋內(nèi)容。編輯完成后,保存并關閉編輯器即可。
  • 顯示所有注釋:使用git notes list命令可以顯示所有對象的注釋信息。這將列出所有帶有注釋的Git對象及其對應的注釋內(nèi)容。

(9)追溯文件歷史修改記錄

git blame 用于追溯文件歷史修改記錄,它可以顯示指定文件中每一行代碼的最后修改者以及修改時間,幫助開發(fā)者了解代碼的演變過程。YYQ28資訊網(wǎng)——每日最新資訊28at.com

以按照以下步驟使用git blame命令:YYQ28資訊網(wǎng)——每日最新資訊28at.com

  • 打開終端或命令行界面,并導航到Git倉庫的根目錄。
  • 運行git blame <file>命令,其中<file>是要查看歷史修改記錄的文件的路徑。

git blame命令將列出文件的每一行,并顯示最后一次修改該行的提交信息,包括提交的哈希值、作者、修改時間和提交注釋等。這樣,你可以輕松地找到代碼中引入bug的提交,或者識別特定代碼段的貢獻者。YYQ28資訊網(wǎng)——每日最新資訊28at.com

除了基本的用法,git blame命令還接受一些參數(shù)來調(diào)整輸出。例如,使用-L <start>,<end>參數(shù)可以指定查看的行范圍,只顯示指定行范圍內(nèi)的代碼修改信息。使用-p參數(shù)可以顯示每一行的詳細信息,包括提交的哈希值、作者、時間戳和行號。此外,還可以使用-C和-M選項來查找代碼重命名和移動的情況,以便更好地追蹤代碼的變化。YYQ28資訊網(wǎng)——每日最新資訊28at.com

(10)創(chuàng)建存檔

git archive 用于創(chuàng)建存檔(archive)文件,通常是一個壓縮文件,包含了Git倉庫中的特定文件或目錄。這個命令允許你將Git倉庫中的文件打包成一個獨立的文件,方便備份、傳輸或發(fā)布。YYQ28資訊網(wǎng)——每日最新資訊28at.com

要使用git archive命令,需要指定存檔文件的格式(如.zip、.tar等),以及要包含的文件或目錄。以下是一些常用的git archive命令的用法:YYQ28資訊網(wǎng)——每日最新資訊28at.com

  • 創(chuàng)建tar格式的存檔文件,包含當前分支的最新代碼:
git archive --format=tar --prefix=my-project/ HEAD | gzip > my-project.tar.gz

這個命令將創(chuàng)建一個名為my-project.tar.gz的壓縮文件,其中包含了當前分支(HEAD)的最新代碼。--prefix選項用于在存檔文件中添加一個前綴目錄my-project/。YYQ28資訊網(wǎng)——每日最新資訊28at.com

  • 創(chuàng)建zip格式的存檔文件,只包含指定的文件或目錄:
git archive --format=zip --output=my-files.zip path/to/file1 path/to/file2

這個命令將創(chuàng)建一個名為my-files.zip的壓縮文件,其中只包含了指定的文件或目錄。你可以通過路徑來指定要包含的文件或目錄。YYQ28資訊網(wǎng)——每日最新資訊28at.com

注意,git archive命令只會包含文件的當前版本,而不會包含Git的元數(shù)據(jù)(如提交歷史、分支信息等)。因此,存檔文件主要用于備份或發(fā)布代碼,而不是作為完整的Git倉庫來使用。YYQ28資訊網(wǎng)——每日最新資訊28at.com

(11)驗證提交

git verify-commit用于驗證提交(commit)的GPG簽名。GPG(GNU Privacy Guard)是一種加密軟件,可以用于為Git提交添加數(shù)字簽名,以確保提交的完整性和真實性。YYQ28資訊網(wǎng)——每日最新資訊28at.com

要使用git verify-commit命令,需要先確保已經(jīng)為Git配置了GPG簽名,并且至少有一個提交是帶有GPG簽名的。然后按照以下步驟進行操作:YYQ28資訊網(wǎng)——每日最新資訊28at.com

  • 打開終端或命令行界面,并導航到Git倉庫的根目錄。
  • 運行git verify-commit <commit>命令,其中<commit>是要驗證的提交的哈希值或引用(如分支名、標簽名等)。

git verify-commit命令將檢查指定提交的GPG簽名,并輸出驗證結果。如果簽名有效且未被篡改,命令將顯示“Good signature”或類似的消息。如果簽名無效或存在問題,命令將顯示相應的錯誤消息。YYQ28資訊網(wǎng)——每日最新資訊28at.com

除了基本的用法,git verify-commit命令還接受一些參數(shù)來調(diào)整輸出和行為。例如,使用--raw參數(shù)可以打印原始的GPG狀態(tài)輸出,而不是人類可讀的輸出。使用--verbose參數(shù)可以打印提交對象的詳細內(nèi)容,以便更詳細地了解驗證過程。YYQ28資訊網(wǎng)——每日最新資訊28at.com

注意,要使用git verify-commit命令,必須已經(jīng)為Git配置了GPG簽名,并且至少有一個提交是帶有GPG簽名的。如果提交沒有簽名或簽名無效,該命令將無法驗證提交的真實性。YYQ28資訊網(wǎng)——每日最新資訊28at.com

4. 遠程操作

(1)查看遠程倉庫

可以使用以下命令來查看遠程倉庫:YYQ28資訊網(wǎng)——每日最新資訊28at.com

git remote

該命令會列出指定的每一個遠程服務器的簡寫。如果已經(jīng)克隆了遠程倉庫,那么至少應該能看到 origin ,這是 Git 克隆的倉庫服務器的默認名字:YYQ28資訊網(wǎng)——每日最新資訊28at.com

YYQ28資訊網(wǎng)——每日最新資訊28at.com

可以執(zhí)行以下命令來獲取遠程倉庫的地址:YYQ28資訊網(wǎng)——每日最新資訊28at.com

git remote -v

其中fetch是獲取,push是推送:YYQ28資訊網(wǎng)——每日最新資訊28at.com

YYQ28資訊網(wǎng)——每日最新資訊28at.com

可以使用以下命令來查看更加詳細的信息:YYQ28資訊網(wǎng)——每日最新資訊28at.com

git remote show origin

輸出結果如下:YYQ28資訊網(wǎng)——每日最新資訊28at.com

YYQ28資訊網(wǎng)——每日最新資訊28at.com

(2)添加遠程倉庫

可以使用以下命令來將本地項目鏈接到遠程倉庫:YYQ28資訊網(wǎng)——每日最新資訊28at.com

git remote add <remote_name> <remote_url>

其中:YYQ28資訊網(wǎng)——每日最新資訊28at.com

  • remote_name:倉庫名稱(默認是origin)
  • remote_url:遠程倉庫地址

該命令允許 Git 跟蹤遠程存儲庫并將本地存儲庫連接到遠程倉庫。YYQ28資訊網(wǎng)——每日最新資訊28at.com

(3)移除遠程倉庫

可以使用命令來移除遠程倉庫:YYQ28資訊網(wǎng)——每日最新資訊28at.com

git remote rm origin

需要注意,該命令只是從本地移除遠程倉庫的記錄(也就是解除本地倉庫和遠程倉庫的關系),并不會真正影響到遠程倉庫。YYQ28資訊網(wǎng)——每日最新資訊28at.com

(4)從遠程倉庫抓取與拉取

可以使用以下命令來從遠程倉庫獲取最新版本到本地倉庫,不會自動merge(合并數(shù)據(jù)):YYQ28資訊網(wǎng)——每日最新資訊28at.com

git fetch

由于該命令不會自定合并數(shù)據(jù),所以該命令執(zhí)行完后需要手動執(zhí)行 git merge 遠程分支到所在的分支。YYQ28資訊網(wǎng)——每日最新資訊28at.com

可以使用以下命令來將遠程指定分支拉取到本地指定分支上:YYQ28資訊網(wǎng)——每日最新資訊28at.com

git pull origin <遠程分支名>:<本地分支名>

使用以下命令來將遠程指定分支拉取到本地當前分支上:YYQ28資訊網(wǎng)——每日最新資訊28at.com

git pull origin <遠程分支名>

使用以下命令開將與本地當前分支同名的遠程分支拉取到本地當前分支上:YYQ28資訊網(wǎng)——每日最新資訊28at.com

git pull

注意:如果當前本地倉庫不是從遠程倉庫克隆,而是本地創(chuàng)建的倉庫,并且倉庫中存在文件,此時再從遠程倉庫拉取文件的時候會報錯(fatal: refusing to merge unrelated histories ),解決此問題可以在git pull命令后加入?yún)?shù)--allow-unrelated-histories,即:YYQ28資訊網(wǎng)——每日最新資訊28at.com

git pull --allow-unrelated-histories

(5)推送到遠程倉庫

可以使用以下命令將本地指定分支推送到遠程指定分支上:YYQ28資訊網(wǎng)——每日最新資訊28at.com

git push origin <本地分支名>:<遠程分支名>

可以使用以下命令將本地指定分支推送到與本地當前分支同名的遠程分支上:YYQ28資訊網(wǎng)——每日最新資訊28at.com

git push origin <本地分支名>

使用以下命令將本地當前分支推送到與本地當前分支同名的遠程分支上:YYQ28資訊網(wǎng)——每日最新資訊28at.com

git push

可以使用以下命令來將本地分支與遠程同名分支相關聯(lián):YYQ28資訊網(wǎng)——每日最新資訊28at.com

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

由于遠程庫是空的,第一次推送master分支時,加上了-u參數(shù),Git不但會把本地的master分支內(nèi)容推送的遠程新的master分支,還會把本地的master分支和遠程的master分支關聯(lián)起來,在以后的推送或者拉取時就可以簡化命令為git push。YYQ28資訊網(wǎng)——每日最新資訊28at.com

Git 進階

1. 修改操作

如果只是簡單地從工作目錄中手工刪除文件,運行 git status 時就會在 Changes not staged for commit 的提示YYQ28資訊網(wǎng)——每日最新資訊28at.com

(1)刪除文件

可以使用以下命令將文件從暫存區(qū)和工作區(qū)中刪除:YYQ28資訊網(wǎng)——每日最新資訊28at.com

git rm <filename>

如果刪除之前修改過并且已經(jīng)放到暫存區(qū)域的話,則必須要用強制刪除選項 -f:YYQ28資訊網(wǎng)——每日最新資訊28at.com

git rm -f <filename>

如果想把文件從暫存區(qū)域移除,但仍然希望保留在當前工作目錄中,換句話說,僅是從跟蹤清單中刪除,使用 --cached 選項即可:YYQ28資訊網(wǎng)——每日最新資訊28at.com

git rm --cached <filename>

可以使用以下命令進行遞歸刪除,即如果后面跟的是一個目錄做為參數(shù),則會遞歸刪除整個目錄中的所有子目錄和文件:YYQ28資訊網(wǎng)——每日最新資訊28at.com

git rm –r *

進入某個目錄中,執(zhí)行此語句,就會刪除該目錄下的所有文件和子目錄。YYQ28資訊網(wǎng)——每日最新資訊28at.com

(2)取消修改

取消修改有三種情況:YYQ28資訊網(wǎng)——每日最新資訊28at.com

未使用 git add 將修改文件添加到暫存區(qū)這種情況下,可以使用以下命令來撤銷所有還沒有加入到緩存區(qū)的修改:YYQ28資訊網(wǎng)——每日最新資訊28at.com

git checkout -- <filename>

需要注意,此文件不會刪除新建的文件,因為新建的文件還沒加入到Git管理系統(tǒng)重,所以對Git來說事未知的,需要手動刪除。YYQ28資訊網(wǎng)——每日最新資訊28at.com

已使用 git add 將修改文件添加到暫存區(qū),未使用 git commit 提交緩存這種情況下,相當于撤銷了 git add 命令對于文件修改的緩存:YYQ28資訊網(wǎng)——每日最新資訊28at.com

git reset HEAD <filename>

上面的命令可以撤銷指定文件的緩存,要想放棄所有文件的緩存,可以執(zhí)行以下命令:YYQ28資訊網(wǎng)——每日最新資訊28at.com

git reset HEAD

需要注意,在使用此命令后,本地的修改并不會消失,而會回到第一種情況。要想撤銷本地的修改,執(zhí)行第一種情況中的命令即可。YYQ28資訊網(wǎng)——每日最新資訊28at.com

除此之外,還可以指定返回到N次提交之前的階段,執(zhí)行以下命令即可:YYQ28資訊網(wǎng)——每日最新資訊28at.com

git reset HEAD~N

這樣就能退回到n個版本之前,同樣不會修改本地文件的內(nèi)容,這些新的內(nèi)容會變成未更新到緩存區(qū)的狀態(tài)。YYQ28資訊網(wǎng)——每日最新資訊28at.com

已使用 git commit 提交緩存這種情況下,可以使用以下命令來回退到上一次 commit 的狀態(tài):YYQ28資訊網(wǎng)——每日最新資訊28at.com

git reset --hard HEAD^

也可以使用以下命令來回退到任意版本:YYQ28資訊網(wǎng)——每日最新資訊28at.com

git reset --hard <commit_id>

注意,使用 git log 命令來查看 git 提交歷史和 commit id。YYQ28資訊網(wǎng)——每日最新資訊28at.com

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

這是一個很重要的命令,假如回退到某個舊版本,現(xiàn)在想恢復到新版本,又找不到新版本的commit id怎么辦?Git 提供了下面的命令用來記錄每一次命令:YYQ28資訊網(wǎng)——每日最新資訊28at.com

git reflog show HEADgit reflog

執(zhí)行之后輸出如下:YYQ28資訊網(wǎng)——每日最新資訊28at.com

YYQ28資訊網(wǎng)——每日最新資訊28at.com

可以看到,最左側(cè)黃色字體就是修改的 commit id,根據(jù)這個id就可以將代碼恢復到對應節(jié)點位置。HEAD@{n}表示HEAD更改歷史記錄,最近的操作在上面。YYQ28資訊網(wǎng)——每日最新資訊28at.com

假如需要把代碼回退到HEAD@{5}處,可以執(zhí)行以下命令:YYQ28資訊網(wǎng)——每日最新資訊28at.com

git reset --hard HEAD@{5}

或者執(zhí)行下面的命令:YYQ28資訊網(wǎng)——每日最新資訊28at.com

git reset --hard 8a0fd74

需要注意,如果有任何本地修改,該命令也會將其銷毀,因此在reset之前建議使用stash將本地修改儲存。YYQ28資訊網(wǎng)——每日最新資訊28at.com

(4)刪除未跟蹤文件

git clean 用于從工作目錄中刪除未跟蹤的文件。這些文件通常是那些由編輯器、構建過程或其他工具生成的臨時文件或副產(chǎn)品,而不是Git倉庫中的一部分。使用git clean命令可以幫助保持工作目錄的整潔,避免這些未跟蹤的文件干擾正常的Git操作或?qū)е乱馔獾奶峤弧?span style="display:none">YYQ28資訊網(wǎng)——每日最新資訊28at.com

git clean命令的基本語法如下:YYQ28資訊網(wǎng)——每日最新資訊28at.com

git clean [-dfnxq] [-e <pattern>] [-i] [-n] [-f] [-r | -R] [<path>...]

下面是一些常用的選項和參數(shù):YYQ28資訊網(wǎng)——每日最新資訊28at.com

  • -d:刪除未跟蹤的目錄和文件。默認情況下,git clean只刪除未跟蹤的文件。
  • -f:強制執(zhí)行刪除操作,不會提示用戶確認。
  • -n:僅顯示將要刪除的文件和目錄列表,而不實際刪除它們。這可以用于檢查將要刪除的內(nèi)容。
  • -x:刪除所有未跟蹤的文件和目錄,包括被.gitignore文件忽略的文件和目錄。
  • -q:靜默模式,不輸出任何信息。
  • -e <pattern>:指定要排除的文件模式??梢允褂猛ㄅ浞麃砥ヅ湟懦奈募蚰夸?。
  • -i:交互式模式,會提示用戶確認每個要刪除的文件或目錄。
  • <path>...:指定要清理的路徑。如果不指定路徑,將默認清理整個工作目錄。

以下是一些使用git clean命令的示例:YYQ28資訊網(wǎng)——每日最新資訊28at.com

刪除所有未跟蹤的文件和目錄:YYQ28資訊網(wǎng)——每日最新資訊28at.com

git clean -df

僅顯示將要刪除的文件和目錄列表:YYQ28資訊網(wǎng)——每日最新資訊28at.com

git clean -n

強制執(zhí)行刪除操作,不提示用戶確認:YYQ28資訊網(wǎng)——每日最新資訊28at.com

git clean -f

刪除所有未跟蹤的文件和目錄,包括被.gitignore文件忽略的內(nèi)容:YYQ28資訊網(wǎng)——每日最新資訊28at.com

git clean -dfx

注意,使用git clean命令時要小心,確保不會誤刪除重要的文件。在執(zhí)行刪除操作之前,最好先使用-n選項來預覽要刪除的內(nèi)容。YYQ28資訊網(wǎng)——每日最新資訊28at.com

git rm 和 git clean 都是刪除文件,那他們之間有什么區(qū)別呢?YYQ28資訊網(wǎng)——每日最新資訊28at.com

  • git rm主要用于從暫存區(qū)及版本庫中刪除已跟蹤的文件。換句話說,這個命令針對的是已經(jīng)被Git管理的文件。如果你嘗試使用git rm刪除一個未被Git跟蹤的文件,它將不會有任何效果。
  • git clean命令則主要用于刪除工作區(qū)中的未跟蹤文件,即那些未被Git管理的文件。這些文件可能是由編輯器、構建過程或其他工具生成的臨時文件或副產(chǎn)品。git clean操作其實更像純粹的rm命令,但能夠方便地刪除未跟蹤文件。

2. 標簽操作

標簽指的是某個分支某個特定時間點的狀態(tài),通過標簽可以很方便的了解到標記時的狀態(tài)。YYQ28資訊網(wǎng)——每日最新資訊28at.com

標簽有兩種類型 :YYQ28資訊網(wǎng)——每日最新資訊28at.com

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

(1)展示標簽

可以使用以下命令來獲取所有標簽:YYQ28資訊網(wǎng)——每日最新資訊28at.com

git tag

它會列出所有標簽的名稱:YYQ28資訊網(wǎng)——每日最新資訊28at.com

YYQ28資訊網(wǎng)——每日最新資訊28at.com

可以使用以下命令來查看某一個標簽的詳細信息:YYQ28資訊網(wǎng)——每日最新資訊28at.com

git show <tag_name>

YYQ28資訊網(wǎng)——每日最新資訊28at.com

還可以根據(jù)條件來顯示標簽,比如列出以v1.開頭的所有tag:YYQ28資訊網(wǎng)——每日最新資訊28at.com

git tag -l "v1."

(2)創(chuàng)建標簽

可以使用以下命令在本地創(chuàng)建新標簽:YYQ28資訊網(wǎng)——每日最新資訊28at.com

git tag <tag_name>

例如:YYQ28資訊網(wǎng)——每日最新資訊28at.com

git tag v1.0.0

通常遵循的命名模式如下:YYQ28資訊網(wǎng)——每日最新資訊28at.com

v<major>.<minor>.<patch>
  • major(主版本號):重大變化
  • minor(次要版本號):版本與先前版本兼容
  • patch(補丁號):bug修復

除此之外,我們還可以為特定的commit創(chuàng)建標簽,其命令格式如下:YYQ28資訊網(wǎng)——每日最新資訊28at.com

git tag <tagname> <commit_sha>

以上面的的形式創(chuàng)建的標簽都屬于輕量標簽,下面來看看如何創(chuàng)建一個附注標簽。YYQ28資訊網(wǎng)——每日最新資訊28at.com

在創(chuàng)建標簽時,可以添加一個-a標志以創(chuàng)建一個帶備注的標簽,備注信息使用-m message來指定:YYQ28資訊網(wǎng)——每日最新資訊28at.com

git tag -a <tagname> -m "<message>"

(3)推送標簽

標簽創(chuàng)建完成之后就可以使用以下命令將其推送到遠程倉庫:YYQ28資訊網(wǎng)——每日最新資訊28at.com

git push origin --tags

以上命令會將本地所有tag都推送到遠程倉庫。如果想推送指定標簽,可以執(zhí)行以下命令:YYQ28資訊網(wǎng)——每日最新資訊28at.com

git push origin <tagname>

(4)切換標簽

可以使用以下命令來切換標簽:YYQ28資訊網(wǎng)——每日最新資訊28at.com

git checkout <tagname>

(5)刪除標簽

可以使用以下命令來刪除本地倉庫指定標簽:YYQ28資訊網(wǎng)——每日最新資訊28at.com

git tag -d <tagname>

可以使用以下命令來刪除遠程倉庫指定標簽:YYQ28資訊網(wǎng)——每日最新資訊28at.com

git push origin :refs/tags/<tagname>

也可以使用以下命令來刪除遠程倉庫的指定標簽:YYQ28資訊網(wǎng)——每日最新資訊28at.com

git push origin --delete <tagname>

(6)拉取標簽

可以使用以下命令來將遠程倉庫的標簽拉?。ㄍ剑┑疆斍胺种В?span style="display:none">YYQ28資訊網(wǎng)——每日最新資訊28at.com

git fetch --tags

(7)檢出標簽

檢出標簽實際上就是在標簽的基礎上進行其他開發(fā)或操作。需要以標簽指定的版本為基礎版本,新建一個分支,繼續(xù)其他的操作。執(zhí)行以下命令即可:YYQ28資訊網(wǎng)——每日最新資訊28at.com

git checkout -b <branch> <tagname>

(8)驗證標簽

git verify-tag  用于驗證標簽(tag)的 GPG 簽名。GPG(GNU Privacy Guard)是一種用于文件簽名的工具,它可以確保標簽的完整性和真實性,防止標簽被篡改或偽造。YYQ28資訊網(wǎng)——每日最新資訊28at.com

要使用 git verify-tag 命令,需要先確保已經(jīng)為 Git 配置了 GPG 簽名。然后,可以按照以下步驟進行操作:YYQ28資訊網(wǎng)——每日最新資訊28at.com

  • 打開終端或命令行界面,并導航到 Git 倉庫的根目錄。
  • 運行 git verify-tag <tag> 命令,其中 <tag> 是要驗證的標簽名稱。

git verify-tag 命令將檢查指定標簽的 GPG 簽名,并輸出驗證結果。如果簽名有效且未被篡改,命令將顯示 "Good signature" 或類似的消息。如果簽名無效或存在問題,命令將顯示相應的錯誤消息。YYQ28資訊網(wǎng)——每日最新資訊28at.com

除了基本的用法,git verify-tag 命令還接受一些參數(shù)來調(diào)整輸出和行為。例如,使用 --raw 參數(shù)可以打印原始的 GPG 狀態(tài)輸出,而不是人類可讀的輸出。使用 --verbose 參數(shù)可以打印標簽對象的詳細內(nèi)容,以便更詳細地了解驗證過程。YYQ28資訊網(wǎng)——每日最新資訊28at.com

3. 日志記錄

(1)基礎日志

可以使用以下命令來查看分支的歷史提交信息:YYQ28資訊網(wǎng)——每日最新資訊28at.com

git log

這是其最基礎的用法,輸出如下:YYQ28資訊網(wǎng)——每日最新資訊28at.com

YYQ28資訊網(wǎng)——每日最新資訊28at.com

可以看到,終端上輸出了該分支近期的提交記錄,它包含了所有貢獻者的提交。YYQ28資訊網(wǎng)——每日最新資訊28at.com

(2)按作者查看

如果想只看某個人的提交,可以添加過濾條件:YYQ28資訊網(wǎng)——每日最新資訊28at.com

git log --author="username"

當然也可以搜索多個作者的提交信息,只需要在用|分隔用戶名即可,注意需要使用/來對|進行轉(zhuǎn)義:YYQ28資訊網(wǎng)——每日最新資訊28at.com

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

這里列出的是每次提交的詳細信息,如果指向看到每個提交的概要,可以在命令中添加--oneline標志:YYQ28資訊網(wǎng)——每日最新資訊28at.com

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

(3)按時間查看

除了可以按照作者來查看日志之外,還可以按照時間查看日志??梢圆榭茨硞€時間之前的日志,也可以查看某個日期之后的日志:YYQ28資訊網(wǎng)——每日最新資訊28at.com

//某個日期之后git log --since=<date>git log --after=<date>//某個日期之前git log --until=<date>git log --before=<date>

如果想查看某個具體時間區(qū)間之間的日志,可以組合以上參數(shù):YYQ28資訊網(wǎng)——每日最新資訊28at.com

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

(4)按文件查看

如果我們想查看某個文件都在哪些提交中修改了內(nèi)容,也是可以的。使用以下命令即可:YYQ28資訊網(wǎng)——每日最新資訊28at.com

git log -- <path>

比如查看README.md文件的修改記錄:YYQ28資訊網(wǎng)——每日最新資訊28at.com

YYQ28資訊網(wǎng)——每日最新資訊28at.com

(5)按合并查看

在歷史提交中可能會有很多次合并的提交記錄,想要只查看代碼合并的記錄,可以執(zhí)行以下命令:YYQ28資訊網(wǎng)——每日最新資訊28at.com

git log --merges

如果想查看非合并操作的操作記錄,可以執(zhí)行以下命令:YYQ28資訊網(wǎng)——每日最新資訊28at.com

git log --no-merges

(6)按分支查看

可以按照分支查看日志,如果想查看test分支比master分支多提交了哪些內(nèi)容,就可以執(zhí)行以下命令:YYQ28資訊網(wǎng)——每日最新資訊28at.com

git log master..test

相反,如果想看master分支比test分支多提交了哪些內(nèi)容,就可以執(zhí)行以下命令:YYQ28資訊網(wǎng)——每日最新資訊28at.com

git log test..master

(7)美化日志

git log命令可以用來查看提交歷史,此命令的問題在于,隨著項目復雜性的增加,輸出變得越來越難閱讀??梢允褂靡韵旅顏砻阑罩镜妮敵觯?span style="display:none">YYQ28資訊網(wǎng)——每日最新資訊28at.com

git log --graph --oneline --decorate

輸出結果如下,這樣就能看到更簡潔的細分以及不同分支如何連接在一起:YYQ28資訊網(wǎng)——每日最新資訊28at.com

YYQ28資訊網(wǎng)——每日最新資訊28at.com

(8)其他標志

上面我們提到了,可以使用--oneline標志來簡化日志的輸出:YYQ28資訊網(wǎng)——每日最新資訊28at.com

git log --oneline

可以使用--stat標志來簡要顯示文件增改行數(shù)統(tǒng)計,每個提交都列出了修改過的文件,以及其中添加和移除的行數(shù),并在最后列出所有增減行數(shù)小計:YYQ28資訊網(wǎng)——每日最新資訊28at.com

git log --stat

可以添加-N標志來僅顯示最近N次的提交,其中N是一個正整數(shù),例如查看最近三次提交:YYQ28資訊網(wǎng)——每日最新資訊28at.com

git log -3

可以使用-p標志來展開顯示每次提交的內(nèi)容差異對比:YYQ28資訊網(wǎng)——每日最新資訊28at.com

git log -p

注意,以上這些命令標識符都可以組合使用。YYQ28資訊網(wǎng)——每日最新資訊28at.com

4. 差異對比

git diff 命令可以用來比較文件的不同,即比較文件在暫存區(qū)和工作區(qū)的差異。YYQ28資訊網(wǎng)——每日最新資訊28at.com

(1)未緩存改動

當工作區(qū)有改動,暫存區(qū)為空時, diff對比的是工作區(qū)與最后一次commit提交的共同文件;當工作區(qū)有改動,暫存區(qū)不為空時,diff對比的是工作區(qū)與暫存區(qū)的共同文件。YYQ28資訊網(wǎng)——每日最新資訊28at.com

(2)已緩存改動

當已緩存改動時,可以使用以下任一命令來顯示暫存區(qū)(已add但未commit文件)和最后一次commit(HEAD)之間的所有不相同文件的差異對比:YYQ28資訊網(wǎng)——每日最新資訊28at.com

git diff --cachedgit diff --staged

(3)已緩存和未緩存改動

可以使用以下命令來顯示工作目錄(已修改但未add文件)和暫存區(qū)(已add但未commit文件)與最后一次commit之間的的所有不相同文件的差異對比:YYQ28資訊網(wǎng)——每日最新資訊28at.com

git diff HEAD

(4)不同分支差異

可以使用以下命令來比較兩個分支上最后 commit 的內(nèi)容的差別:YYQ28資訊網(wǎng)——每日最新資訊28at.com

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

這樣就可以顯示出兩個分支的詳細差異,如果只是想看有哪些文件存在差異,可以在命令中添加--stat標志,這樣就不會顯示每個文件的內(nèi)容的詳細對比:YYQ28資訊網(wǎng)——每日最新資訊28at.com

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

5. 定位問題

git bisect 采用二分查找算法來幫助開發(fā)者快速定位引入問題的提交。當在代碼庫中遇到錯誤,但不確定何時引入時,git bisect可以顯著提高查找錯誤的效率。YYQ28資訊網(wǎng)——每日最新資訊28at.com

原理:git bisect使用二分查找算法來縮小引入問題的提交范圍。它首先將提交歷史分為兩半,然后詢問開發(fā)者哪一半包含引入錯誤的提交?;陂_發(fā)者的反饋,git bisect會繼續(xù)將范圍縮小到更小的一半,直到找到引入問題的確切提交。YYQ28資訊網(wǎng)——每日最新資訊28at.com

使用git bisect的基本步驟如下:YYQ28資訊網(wǎng)——每日最新資訊28at.com

  • 確定一個包含錯誤的提交(bad commit)和一個不包含錯誤的提交(good commit)。這通常通過手動檢查提交歷史或使用其他工具來完成。
  • 從頂層工作目錄開始,執(zhí)行git bisect start來啟動二分查找過程。
  • 使用git bisect bad <bad-commit>將包含錯誤的提交標記為bad。
  • 使用git bisect good <good-commit>將不包含錯誤的提交標記為good。
  • Git現(xiàn)在會計算出中間提交,并簽出該提交。你需要通過測試來確定該提交是否包含錯誤。
  • 如果中間提交包含錯誤,執(zhí)行git bisect bad。如果不包含錯誤,執(zhí)行git bisect good。
  • Git將基于你的反饋繼續(xù)縮小范圍,并簽出下一個中間提交。重復步驟5和6,直到找到引入問題的確切提交。
  • 一旦找到引入問題的提交,git bisect將打印出相應的提交哈希。你可以使用git bisect reset來重置工作樹,完成整個查找過程。

假設發(fā)現(xiàn)了一個錯誤。不確定這個錯誤是在何時引入的,但是知道在某個特定版本的代碼中該錯誤是不存在的。YYQ28資訊網(wǎng)——每日最新資訊28at.com

  • 首先,確定一個包含錯誤的提交(bad commit)和一個不包含錯誤的提交(good commit)。假設你知道在提交abc123時代碼是工作的,而在提交def456時代碼已經(jīng)出現(xiàn)了錯誤。
  • 從項目的頂層工作目錄開始,執(zhí)行git bisect start。
  • 使用git bisect bad def456將提交def456標記為bad。
  • 使用git bisect good abc123將提交abc123標記為good。
  • Git將計算出這兩個提交之間的中間提交,并簽出該提交。你需要測試這個提交來確定是否包含錯誤。
  • 假設測試結果顯示中間提交包含錯誤,執(zhí)行git bisect bad。Git將繼續(xù)在bad和中間提交之間查找。
  • 重復步驟5和6,直到Git找到引入問題的確切提交。
  • 一旦找到引入問題的提交,可以使用git bisect reset來重置工作樹,并繼續(xù)你的開發(fā)工作。

Git 實用工具

1. GitLens

GitLens  是一個VS Code插件,可以用來查看項目的提交記錄、文件修改記錄、顯示每行代碼的提交記錄等。通過豐富的可視化和強大的比較命令獲得有價值的見解。YYQ28資訊網(wǎng)——每日最新資訊28at.com

YYQ28資訊網(wǎng)——每日最新資訊28at.com

2. Git History

Git History 是一個VS Code插件,增強了Git 的功能,它可以用來查看日志信息,查看和搜索歷史,進行分支對比、提交對比,跨提交對比文件等。YYQ28資訊網(wǎng)——每日最新資訊28at.com

YYQ28資訊網(wǎng)——每日最新資訊28at.com

3. Git Automator

Git Automator 是一個VS Code插件,主要用來自動化Git提交消息和 Git 工作流程。它允許用一個快捷方式添加和提交文件。它還為提交信息提供了自動填充功能。當動作很明顯時,例如你刪除了一個文件,Git Automator 會猜測該動作并將其添加到預填充的提交消息中。YYQ28資訊網(wǎng)——每日最新資訊28at.com

YYQ28資訊網(wǎng)——每日最新資訊28at.com

4. LearnGitBranching

LearnGitBranching 是一個 git 存儲庫可視化工具、沙箱和一系列教程和挑戰(zhàn)。它的主要目的是幫助開發(fā)人員通過可視化的力量來理解 git。這是通過不同級別的游戲來熟悉不同的git命令來實現(xiàn)的。YYQ28資訊網(wǎng)——每日最新資訊28at.com

YYQ28資訊網(wǎng)——每日最新資訊28at.com

Github:https://github.com/pcottle/learnGitBranching。YYQ28資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-75313-0.htmlGit 不用背,這篇文章幫助你簡化 Git 的學習過程

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 淺談鏈路聚合,你學會了嗎?

下一篇: 面向DevSecOps的開源持續(xù)安全測試方案--secureCodeBox

標簽:
  • 熱門焦點
Top 主站蜘蛛池模板: 祁门县| 团风县| 普宁市| 余姚市| 阿图什市| 麦盖提县| 剑河县| 弥勒县| 汉源县| 兖州市| 根河市| 博湖县| 长宁县| 上杭县| 仁怀市| 长治县| 元朗区| 巫溪县| 广灵县| 那曲县| 邯郸县| 潮州市| 泾川县| 朝阳区| 丰城市| 子洲县| 景泰县| 唐山市| 根河市| 岳普湖县| 奉贤区| 平潭县| 凤城市| 兴安盟| 田林县| 竹山县| 佳木斯市| 浪卡子县| 大关县| 东阳市| 宁夏|