🥰🥰🥰來都來了,不妨點個關注叭!
👉博客主頁:歡迎各位大佬!👈
文章目錄
- 1. 初識 Git
- 1.1 Git 是什么?
- 1.2 為什么要有 Git
- 2. 安裝 Git
- 2.1 Linux-Ubuntu 安裝 Git
- 2.2 Windows 安裝 Git
- 3. Git 初始化與配置
- 3.1 創建 Git 本地倉庫
- 3.2 配置 Git
- 3.3 查看配置
- 3.4 刪除配置
- 4. Git 工作流程 - 認識工作區、暫存區、版本庫
- 5. Git 基本操作
- 5.1 添加文件
- 5.1.1 場景一
- 5.1.2 場景二
- 5.2 查看.git文件
- 【可能遇到的問題】 Windows下的 Git Bash 環境下并沒有安裝 tree工具
- 5.3 修改文件
- 5.4 版本回退
- 5.5 撤銷修改
- 5.5.1 情況一:對于工作區代碼還未 add
- 5.5.2 情況二:已經 add,但沒有 commit
- 5.5.3 情況三:已經 add,并且 commit 了
- 5.6 刪除本地倉庫中的文件
1. 初識 Git
1.1 Git 是什么?
Git 是一個開源的分布式版本控制系統,用于高效地跟蹤和管理項目代碼的變更歷史(不僅僅是代碼,還有其它格式也是可以的~)
1.2 為什么要有 Git
在學習或者是工作的時候,比如編寫各種文檔,為了防止文檔丟失,更改失誤,我們不得不復制出一個副本,保留歷史記錄,方便找回歷史記錄,比如:
“設計文檔-v1”
“設計文檔-v2”
“設計文檔-v3”
“設計文檔-確定版”
“設計文檔-最終版”
…
每個版本有各自的內容,但最終會只有?份文檔是需要被使用的,在此之前的?作都需要這些不同版本的報告,于是每次都是復制粘貼副本,文件就越來越多,不僅文件多,更重要的是,隨著版本數量的不斷增多,我們可能記不太清每一個版本具體修改的哪些內容,文檔如此,我們編寫的項目代碼也如此!
那么,如何解決呢?
答:版本控制器 ,記錄每次修改以及版本迭代的一個管理系統,目前,最主流的版本控制器就是 Git,可以控制電腦上所有格式的文件
為了能夠更方便管理這些不同版本的?件,便有了版本控制器! 所謂的版本控制器,就是能讓你了解到?個文件的歷史,以及它的發展過程的系統。通俗的講就是?個可以記錄?程的每?次改動和版本迭代的?個管理系統,同時也方便多人協同作業,目前最主流的版本控制器就是 Git,Git 可以控制電腦上所有格式的文件,例如doc、excel、dwg、dgn、rvt等等,對于我們開發?員來說,Git 最重要的就是可以幫助我們管理軟件開發項目中的源代碼文件!
【注意事項】
所有的版本控制系統,Git也不例外,其實只能跟蹤文本文件的改動,比如 txt文件,網頁,所有的程序代碼等等,版本控制系統可以告訴你每次的改動,比如在第10行加了"name",在第12行刪除了一個"Windows",而圖片、視頻等這些二進制文件,雖然也能由版本控制系統管理,但沒辦法跟蹤文件的變化,只能把?進制文件每次改動串起來,即只知道圖片從90KB改成了100KB,但到底改了啥,版本控制系統無法記錄,所有并不知道,也沒法知道~
2. 安裝 Git
接下來,我們來進行實操!安裝 Git ~
Git 是開放源代碼的代碼托管工具,最早是在 Linux 下開發的,當然,最開始也只能應用于 Linux 平臺,后面慢慢的被移植到 Windows下,現在 Git 可以在 Linux、Unix、Mac 和 Windows 這幾大平臺上正常運行了~
2.1 Linux-Ubuntu 安裝 Git
這里介紹 Ubuntu 下的安裝(因為 Centos 現在不維護了~,因此,本文不作過多介紹)
在 Ubuntu 安裝 git 相當簡單~ 一起來看看!
- 首先查看系統有沒有安裝過 Git,輸入命令:
git --version
- 如果出現 git 版本號已經安裝:
- 如果出現這類提示,則沒安裝
Command 'git' not found, but can be installed with:
sudo apt install git
- 沒有則進行安裝,輸入安裝命令:
sudo apt-get install git -y
(在安裝過程中,出現了圖形化界面,回車即可~)
再次輸入git --version
,就可以看到 git 版本號啦!此時,安裝完成!(是不是非常簡單!)
2.2 Windows 安裝 Git
Git 官網直接下載:Git 下載官網
- 選擇 Windows 操作系統
- 根據自己的電腦選擇相應的下載
-
下載完成后,找到下載到的文件,進行雙擊進行安裝
-
接著,按照指示,一步步安裝~
非常簡單的~ 按照指示點下一步就好啦(勇敢牛牛,不怕困難!)
- 檢測是否安裝好 Git,打開 Git Bash
輸入:git -- verison
,出現對應安裝的 git 版本號,就是安裝成功啦!!!
3. Git 初始化與配置
Git 的安裝是很簡單的,現在我們來看看 Git 的初始化與配置~
3.1 創建 Git 本地倉庫
可以將倉庫理解成是進行版本控制的一個文件目錄,如果我們想要對文件進行版本控制,就必須先創建一個倉庫出來!
創建?個 Git 本地倉庫對應的命令為 git init
,注意命令要在文件目錄下執行,例如:
- 首先找到自己想要的文件目錄~
- 右鍵,找到選項【Git Bash Here】 ,進入界面,輸入倉庫初始化命令
我們就會發現,當前目錄下多了一個.git 的隱藏文件,.git 目錄是 Git 用來跟蹤管理倉庫的,千萬不要手動修改里面的文件!!! 如果修改了,很容易亂,就會把 Git 倉庫給破壞了~(感興趣的小伙伴,可以點擊進行詳細了解哦)
3.2 配置 Git
當安裝 Git 后首先要做的事情就是設置你的用戶名稱和 e-mail 地址,這是非常非常重要的,配置命令為:
git config [--global] user.name "Your Name"
git config [--global] user.email "email@example.com" # 把 Your Name 改成你的用戶名
# 把 email@example.com 改成你的郵箱的格式,只要格式正確即可
示例:
git config [--global] user.name "xxx"
git config [--global] user.email "1234567@163.com"
注意 --global
是?個可選項,如果使用了該選項,就表示這臺機器上所有的 Git 倉庫都會使用這個配置,如果你希望在不同倉庫中使用不同的 name 或 e-mail ,即可以不要 --global
選項,但需要注意的是,執行命令時必須要在倉庫里面~
3.3 查看配置
查看配置命令:git config -l
3.4 刪除配置
刪除對應的配置命令如下:
git config [--global] --unset user.name
git config [--global] --unset user.email
4. Git 工作流程 - 認識工作區、暫存區、版本庫
-
工作區:是在電腦上要寫的代碼或者是文件的目錄
-
暫存區(stage/index):一般存放在 .git 目錄下的 index 文件(.git/index)中,把暫存區有時也叫作索引(index)
-
版本庫(repository):也叫倉庫,工作區有?個隱藏目錄 .git ,它不算工作區,而是 Git 的版本庫,這個版本庫里面的所有文件都可以被 Git管理起來,每個文件的修改、刪除,Git 都能跟蹤,以便任何時刻都可以追蹤歷史,或者在將來某個時刻可以"還原"
- 左側為工作區,右側為版本庫,Git 的版本庫里存放了很多東西,其中最重要的是暫存區
- 在創建版本庫的時候, Git 會自動為我們自動創建一個唯一的 master 的分支,以及指向 master 的一個指針 HEAD (分支與HAED后續介紹)
- 當對工作區修改或者是新增的文件,執行
git add
命令,暫存區目錄樹的文件索引會被更新 - 當執行提交操作
git commit
時,master 分支會做相應的更新,可以簡單理解為暫存區的目錄樹才會被真正寫到版本庫中
Git 工作流程:
- 工作區:開發者實際編輯代碼的目錄
- 暫存區:通過
git add
將修改添加到暫存區,準備提交 - 本地倉庫(Local Repository):通過
git commit
將暫存區的修改保存到本地倉庫,生成一個提交記錄(上述介紹的是本地倉庫) - 遠程倉庫(Remote Repository):通過
git push
將本地提交推送到遠程倉庫,如Gitee、GitHub(后續介紹如何連遠程倉庫)
5. Git 基本操作
(碎碎念:筆者每次都喜歡先看到命令集合,有啥先用啥,之后再慢慢了解原理,因此,這里先介紹幾個常用的命令,方便查找~同時,筆者后續內容均基于 Windows 11 系統展示操作)
命令 | 作用 |
---|---|
git init | 初始化一個Git倉庫 |
git clone | 克隆遠程倉庫到本地 |
git status | 查看當前倉庫狀態 |
git log | 查看歷史提交記錄 |
git reflog | 記錄本地的每?次命令 |
git add | 添加文件到暫存區 |
git commit -m “msg” | 提交修改到本地倉庫 |
git push origin main | 推送到遠程倉庫的main分支 |
git pull origin main | 從遠程倉庫拉取最新代碼 |
git branch | 查看分支 |
git checkout | 切換分支 |
git merge | 合并分支 |
git reset | 版本回退 |
5.1 添加文件
5.1.1 場景一
在包含.git 的目錄下新建?個 Read 文件,
- 可以使用
git add
命令可以將文件添加到暫存區:
-
添加?個或多個文件到暫存區:
git add [file1] [file2] ...
-
添加指定目錄到暫存區,包括子目錄:
git add [dir]
-
添加當前目錄下的所有文件改動到暫存區:
git add .
- 再使用
git commit
命令將暫存區內容添加到本地倉庫中:
-
提交暫存區全部內容到本地倉庫中:
git commit -m "message"
-
提交暫存區的指定文件到倉庫區:
git commit [file1] [file2] ... -m "message"
注意 git commit
后?的 -m 選項,要跟上描述本次提交的 message,由用戶自己完成,這部分內容千萬不能省略,并且要好好描述,這是記錄提交的細節,方便自己看也是方便別人看的~(不好好描述,自己和別人都不好理解哦!)
示例:
git commit
命令執行成功后會告訴我們,1個文件被改動,就是我們新添加的 Read 文件,插入了一行內容,Read 有一行內容
也可以多次 add 不同的?件,而只 commit ?次便可以提交所有文件,是因為需要提交的文件是通通被 add 到暫存區中,然后?次性再commit暫存區的所有修改,如下:
這樣就一次性將暫存區的三個文件都提交了~
可以使用 git log
命令,來查看歷史提交記錄:可以看到剛剛提交的兩次記錄
git log
命令顯示從最近到最遠的提交?志,并且可以看到我們 commit 時的日志消息,如果覺得輸出信息太多,可以加上 --pretty=oneline
參數,即 git log --pretty=oneline
,日志更加簡單,可以清楚了解~
5.1.2 場景二
為了更深刻理解工作區、暫存區、版本庫,這里再展示一種場景,如下:
提交后發現打印了 1 file changed, 0 insertions(+), 0 deletions(-)
,只有?個文件改變了,但是,我們新增了兩個文件呀!
仔細觀察, git add
是將文件添加到暫存區, git commit
是將暫存區的內容添加到本地倉庫中。在上述命令,并沒有使用 git add file5
,file5 就不在暫存區中維護,因此,commit 的時候其實只是把已經在暫存區的 file4 提交了,遺漏了工作區的 file5,那如何提交 file5 呢?很簡單,再次 git add file5
, commit
即可~
所以,有時候你 commit 了,結果該內容并沒有提交,需要排查一下是否將這個內容添加到了暫存區哦~
5.2 查看.git文件
首先,我們來看看 .git 的目錄結構,進入 .git 文件(注意,是點擊進入.git隱藏文件哦!),使用命令:tree
,查看樹形結構
如下:這是沒有任何提交記錄的哦~
在上一小節中,我們添加了文件,再添加文件后,我們再來觀察 .git 文件的樹形結構
【總結】在本地的 git 倉庫中,有幾個文件或者目錄很特殊:
- index: 暫存區, git add 后會更新該內容
- HEAD: 默認指向 master 分支的?個指針
- refs/heads/master: 文件里保存當前 master 分支的最新 commit id
- objects: 包含了創建的各種版本庫對象及內容,可以簡單理解為放了 git 維護的所有修改
【小建議】:在后面的學習過程中,我們最好能將常見的 git 操作與 .git 目錄當中的結構內容變化對應起來,這樣有利于我們理解 git 細節流程
【可能遇到的問題】 Windows下的 Git Bash 環境下并沒有安裝 tree工具
問題:如果出現 bash: tree: command not found
,則說明在 Windows下的 Git Bash 環境下并沒有安裝 tree工具,因此,導致無法使用
解決方式:git bash 默認是沒有 tree 命令的!下載 tree
- 下載
- 解壓,在 bin 目錄下找到 tree.exe
3. 將 tree.exe 拷貝到 git bash 的應用程序位置,找到自己的 git安裝路徑\usr\bin
- 再次輸入 tree 命令,即可:
5.3 修改文件
Git 比其他版本控制系統設計得優秀,是因為 Git 跟蹤并管理的是修改,而并非文件,就比如新增了一行內容,這就是?個修改,刪除了一行內容,也是?個修改,更改了某些字符,也是?個修改,刪了?些?加了?些,同樣是?個修改!
現在對 Read 文件,進行修改,通過 git status
,查看上次提交之后是否有對文件進行再次修改
(注意倉庫中的 Read 和 工作區的 Read 是不同的,我們這里是在工作區進行修改的!通過 git status
,查看當前倉庫的狀態)
圖中結果顯示,Read 已經被修改過,但是還沒有完成添加與提交,目前,只知道文件被修改了,但是不知道具體哪些地方被修改了!(知道這個是很重要的!)
使用 git diff [file]
命令用來顯示暫存區和工作區文件的差異,也可以使用 git diff HEAD -- [file]
命令來查看版本庫和工作區文件的區別,知道了對 Read 做了什么修改后,再把它提交到本地倉庫就會放心許多!
使用 add 添加到暫存區,再 commit 提交到本地倉庫~
5.4 版本回退
我們知道,Git 能夠管理文件的歷史版本,這也是版本控制器最重要的能力,如果想在某個特定的歷史版本重新開始,這個時候,就需要版本回退的功能~ 執行回退版本命令: git reset
可以指定退回某?次提交的版本,注意,"回退"本質是要將版本庫中的內容進行回退,?作區或暫存區是否回退由命令參數決定!
git reset
命令語法格式為: git reset [--soft | --mixed | --hard] [HEAD]
-
--mixed
為默認選項,使用時可以不帶該參數,該參數是將暫存區的內容退回為指定提交版本內容,而工作區文件保持不變 -
--soft
該參數對于工作區和暫存區的內容都不變,只是將版本庫回退到某個指定版本 -
--hard
參數將暫存區和工作區都退回到指定版本,切記!!!工作區有未提交的代碼時千萬不要使用這個命令,因為工作區會回滾,沒有提交的代碼就再也找不回了,因此,使用這個參數的時候,一定要慎重 -
HEAD
可直接寫成 commit id,表示指定退回的版本,也可以這樣寫:
寫法1:使用 ^
HEAD
表示當前版本
HEAD^
表示上?個版本
HEAD^^
表示上上?個版本
以此類推…
寫法2:可以使用 ~ 數字表示
HEAD~0
表示當前版本
HEAD~1
表示上?個版本
HEAD~2
表示上上?個版本
以此類推…
示例:為了方便演示回退功能,先做一些準備工作,更新 3 個版本的 Read,并進行 3 次提交,準備工作如下:
【操作一】提交 version3 后,發現 version3 編寫有誤,想回退到 version2,重新基于 version2 開始寫,這里希望工作區的內容也回退到 version2 版本,因此需要 --hard
參數,如下:
可以看到 Read 文件的內容,已經回退到 version2 了,使用 git log
查看提交?志,也發現 HEAD 指向了 version2
【操作二】后悔回退到 version2,想再回到 version3
可以繼續使用 git reset
命令,回退到 version3 版本,but 我們必須要拿到 version3 的 commit id 去指定回退的版本,從上圖中,看到 git log
并不能打印出 version3 的 commit id ,如果運氣好的話,可以在終端找之前的記錄,運氣不好的話,commit id 已經被我們搞丟啦,不過不用擔心!Git 還提供了?個 git reflog
命令,可以補救?下,該命令用來記錄本地的每?次命令!!!
使用git reflog
可以很方便找到所有操作記錄,但 e9980d9 是什么呢?是 version3 的 commit id 的部分,Git 版本回退的時候,也可以使用部分 commit id 來代表目標版~
【操作三】在實際開發中,由于長時間開發,導致 commit id 早就找不到了,但是又想回到 version3,貌似現在不可能~
我們要知道 Git 版本回退速度非常快,因為 Git 在內部有個指向當前分支,這里是 HEAD 指針默認指向 master 分支,在.git 隱藏文件中refs/heads/master 文件里面保存了當前 master 分支的最新 commit id,當我們在回退版本的時候, Git 僅僅是給 refs/heads/master 中存儲?個特定的 version,可以簡單理解為下圖:
可以查看 refs/heads/master 文件內容,保存了最新的 commit id,如下:
如果是操作二,回退到 version3 版本,則保存的 commit id 為 version3 的:
如果是操作一,回退到 version2 版本,則保存的 commit id 為 version2 的:
5.5 撤銷修改
有一種場景,比如在工作區寫了很久的代碼,但是越寫越寫不下去,覺得自己寫得不太好,想恢復到上?個版本~ 我們需要撤銷修改,這里分三種情況:
5.5.1 情況一:對于工作區代碼還未 add
【操作一】可以直接刪除目前在工作區中新增的代碼(不推薦),如下:
萬幸!才寫了一行內容,就發現需要刪除了,萬一寫了很多,一直都沒有提交,可能都忘記自己新增的哪些內容了,那如何刪除呢?
Git 為我們提供了更好的方式!!!
【操作二】使用 git checkout -- [file]
命令,使工作區文件回到最近一次 add 或者是 commit 狀態(注意,該命令中的 --
千萬不能省略,省略就變成其它意思了!!!)
5.5.2 情況二:已經 add,但沒有 commit
add 了,保存到了暫存區,如何撤銷呢?
還記得剛介紹的 git reset
回退命令嘛!! 該命令使用 --mixed
參數,則可以將暫存區的內容回退到指定版本的內容,工作區文件保持不變,這樣,我們就可以回退暫存區的內容了~
命令:git reset HEAD Read
(注意,這里為啥沒有帶上 --mixed
參數呢?因為 --mixed
參數是默認的!!!)
5.5.3 情況三:已經 add,并且 commit 了
這種情況也無需擔心,使用 git reset --hard HEAD^
回退到上一個版本
不過這里是有條件的,即還沒有將自己本地版本庫推送到遠程!!!(一旦推送到遠程版本庫,那就…)
5.6 刪除本地倉庫中的文件
在 Git 中,刪除也是一個修改操作
下面演示刪除 file4 文件:
使用 rm file4
?
這樣直接刪除是沒有用的,此時只是刪除了工作區的 file4,git status 會告訴你哪些文件被刪除了,但是,這個時候,工作區和版本庫就不一致了,要刪除文件,除了要刪除工作區的文件,還要清除版本庫的文件
到這里,有兩種情況:
【情況一】確實需要從版本庫刪除該文件
使用 git rm [文件名]
,將文件從工作區和暫存區中刪除,并且 commit ~
【情況二】刪錯了
使用 git checkout -- file4
來恢復, 刪除也是修改哦,這是剛剛學過的命令~
這期 git 內容介紹到這里,可以自己動手操作,加深印象哦~
💛💛💛本期內容回顧💛💛💛
???本期內容到此結束啦~