Git分布式版本控制工具使用及說明
Git分布式版本控制工具
目標(biāo)
- 了解 Git 基本概念
- 能夠概述 git 工作流程
- 能夠使用 Git 常用命令
- 熟悉 Git 代碼托管服務(wù)
- 能夠使用 idea 操作 git
概述
開發(fā)中實際的使用場景
- ?場景一:備份小明負(fù)責(zé)的模塊就要完成了,就在即將 Release 之前的一瞬間,電腦突然藍屏,硬盤光榮犧牲!幾個月來的努力付之東流
- 場景二:代碼還原這個項目中需要一個很復(fù)雜的功能,老王摸索了一個星期終于有眉目了,可是這被改得面目全非的代碼已經(jīng)回不到從前了。什么地方能買到哆啦 A 夢的時光機???
- 場景三:協(xié)同開發(fā)小剛和小強先后從文件服務(wù)器上下載了同一個文件:Analysis.java。小剛在 Analysis.java 文件中的第 30 行聲明了一個方法,叫 count (),先保存到了文件服務(wù)器上;小強在 Analysis.java 文件中的第 50 行聲明了一個方法,叫 sum (),也隨后保存到了文件服務(wù)器上,于是,count () 方法就只存在于小剛的記憶中了
- 場景四:追溯問題代碼的編寫人和編寫時間!老王是另一位項目經(jīng)理,每次因為項目進度挨罵之后,他都不知道該扣哪個程序員的工資!就拿這次來說吧,有個 Bug 調(diào)試了 30 多個小時才知道是因為相關(guān)屬性沒有在應(yīng)用初始化時賦值!可是二胖、王東、劉波和正經(jīng)牛都不承認(rèn)是自己干的!
版本控制器的方式
?a、集中式版本控制工具
集中式版本控制工具,版本庫是集中存放在中央服務(wù)器的,team 里每個人 work 時從中央服務(wù)器下載代碼,是必須聯(lián)網(wǎng)才能工作,局域網(wǎng)或互聯(lián)網(wǎng)。個人修改后然后提交到中央版本庫。
舉例:SVN 和 CVS
b、分布式版本控制工具
分布式版本控制系統(tǒng)沒有 “中央服務(wù)器”,每個人的電腦上都是一個完整的版本庫,這樣工作的時候,無需要聯(lián)網(wǎng)了,因為版本庫就在你自己的電腦上。多人協(xié)作只需要各自的修改推送給對方,就能互相看到對方的修改了。
舉例:Git?
Git
?Git 是分布式的,Git 不需要有中心服務(wù)器,我們每臺電腦擁有的東西都是一樣的。我們使用 Git 并且有個中心服務(wù)器,僅僅是為了方便交換大家的修改,但是這個服務(wù)器的地位和我們每個人的 PC 是一樣的。我們可以把它當(dāng)做一個開發(fā)者的 pc 就可以就是為了大家代碼容易交流不關(guān)機制的。沒有它大家一樣可以工作,只不過 “交換” 修改不方便而已。
git 是一個開源的分布式版本控制系統(tǒng),可以有效、高速地處理從很小到非常大的項目版本管理。Git 是 Linus Torvalds 為了幫助管理 Linux 內(nèi)核開發(fā)而開發(fā)的一個開放源碼的版本控制軟件。同生活中的許多偉大事物一樣,Git 誕生于一個極富紛爭大舉創(chuàng)新的年代。Linux 內(nèi)核開源項目有著為數(shù)眾多的參與者。絕大多數(shù)的 Linux 內(nèi)核維護工作都花在了提交補丁和保存歸檔的繁瑣事務(wù)上(1991-2002 年間)。 到 2002 年,整個項目組開始啟用一個專有的分布式版本控制系統(tǒng) BitKeeper 來管理和維護代碼。
到了 2005 年,開發(fā) BitKeeper 的商業(yè)公司同 Linux 內(nèi)核開源社區(qū)的合作關(guān)系結(jié)束,他們收回了 Linux 內(nèi)核社區(qū)免費使用 BitKeeper 的權(quán)力。 這就迫使 Linux 開源社區(qū)(特別是 Linux 的締造者 Linus Torvalds)基于使用 Bitkeeper 時的經(jīng)驗教訓(xùn),開發(fā)出自己的版本系統(tǒng)。他們對新的系統(tǒng)制訂了若干目標(biāo):
速度
- 簡單的設(shè)計
- 對非線性開發(fā)模式的強力支持(允許成千上萬個并行開發(fā)的分支)
- 完全分布式
- 有能力高效管理類似 Linux 內(nèi)核一樣的超大規(guī)模項目(速度和數(shù)據(jù)量)
工作流程

流程節(jié)點與命令說明
| 步驟 | 操作 | 涉及區(qū)域 | 命令 | 說明 |
|---|---|---|---|---|
| 1 | 抓取 / 克隆 | 遠程倉庫 → 本地倉庫 | clone | 從遠程倉庫中克隆代碼到本地倉庫 |
| 2 | 檢出 | 本地倉庫 → 工作區(qū) | checkout | 從本地倉庫中檢出一個倉庫分支然后進行修訂 |
| 3 | 添加 | 工作區(qū) → 暫存區(qū) | add | 在提交前先將代碼提交到暫存區(qū) |
| 4 | 提交 | 暫存區(qū) → 本地倉庫 | commit | 提交到本地倉庫,本地倉庫中保存修改的各個歷史版本 |
| 5 | 拉取 | 遠程倉庫 → 工作區(qū) | pull(fetch+merge) | 從遠程庫拉到本地庫,自動進行合并 (merge),然后放到工作區(qū) |
| 6 | 推送 | 本地倉庫 → 遠程倉庫 | push | 修改完成后,需要和團隊成員共享代碼時,將代碼推送到遠程倉庫 |
| - | 抓取 | 遠程倉庫 → 本地倉庫 | fetch | 從遠程庫抓取到本地庫,不進行任何合并動作,一般操作比較少 |
區(qū)域說明
- 遠程倉庫(Remote):存儲代碼的遠程服務(wù)器端倉庫
- 本地倉庫(Repository):本地存儲代碼版本的倉庫
- 暫存區(qū)(Index):提交前臨時存儲代碼修改的區(qū)域
- 工作區(qū)(workspace):開發(fā)者實際編寫、修改代碼的區(qū)域
初始化一個git倉庫
?1)在電腦的任意位置創(chuàng)建一個空目錄(例如 test)作為我們的本地 Git 倉庫
2)進入這個目錄中,點擊右鍵打開 Git bash 窗口
3)執(zhí)行命令 git init
4)如果創(chuàng)建成功后可在文件夾下看到隱藏的.git 目錄。
創(chuàng)建一個文件夾->進去文件夾->右鍵點擊后選擇git bash here->輸入命令 git init

基礎(chǔ)操作指令
Git 工作目錄下對于文件的修改 (增加、刪除、更新) 會存在幾個狀態(tài),這些修改的狀態(tài)會隨著我們執(zhí)行 Git 的命令而發(fā)生變化。
| 區(qū)域 | 說明 | 狀態(tài)與轉(zhuǎn)換 |
|---|---|---|
| 倉庫(repository) | 修改進入到倉庫就變成了一次提交記錄 | 包含多次提交記錄(如 commit 01、commit 02、commit 03),通過git commit命令從暫存區(qū)提交而來 |
| 暫存區(qū)(index) | 提交到倉庫之前的緩存區(qū) | 狀態(tài)為已暫存(staged),通過git add命令從工作區(qū)轉(zhuǎn)換而來 |
| 工作區(qū)(workspace) | 開發(fā)者實際編寫、修改代碼的區(qū)域 | 包含兩種狀態(tài):-未暫存(unstaged):修改已有文件后的狀態(tài)-未跟蹤(untracked):新創(chuàng)建一個文件后的狀態(tài)均可通過git add命令轉(zhuǎn)換到暫存區(qū) |
基礎(chǔ)指令與狀態(tài)轉(zhuǎn)換
git add:實現(xiàn)工作區(qū)到暫存區(qū)的狀態(tài)轉(zhuǎn)換git commit:實現(xiàn)暫存區(qū)到本地倉庫的狀態(tài)轉(zhuǎn)換

Git 基礎(chǔ)操作指令說明
| 指令類別 | 作用 | 命令形式 | 補充說明 | |
|---|---|---|---|---|
| 查看修改的狀態(tài)(status) | 查看暫存區(qū)、工作區(qū)中文件修改的狀態(tài) | git status | 可直觀了解文件是未跟蹤、已修改還是已暫存,是 Git 操作的 “狀態(tài)儀表盤” | |
| 添加工作區(qū)到暫存區(qū)(add) | 添加工作區(qū)一個或多個文件的修改到暫存區(qū) | git add 單個文件名 | 通配符 <br> 示例:git add .`(將所有修改加入暫存區(qū)) | 是連接工作區(qū)和暫存區(qū)的關(guān)鍵指令,提交前需先執(zhí)行該操作將修改 “暫存” |
| 提交暫存區(qū)到本地倉庫(commit) | 提交暫存區(qū)內(nèi)容到本地倉庫的當(dāng)前分支 | git commit -m '注釋內(nèi)容' | -m 用于指定提交說明,需簡潔描述本次提交的修改意圖,方便后續(xù)追溯版本 |
這些指令是 Git 版本控制的核心流程節(jié)點:
通過git status掌握文件狀態(tài),用git add將修改納入暫存區(qū),再通過git commit固化為本地倉庫的版本記錄,從而完成一次完整的 “修改 - 暫存 - 提交” 版本管理流程。
查看提交日志(log)
| 維度 | 核心信息 |
|---|---|
| 作用 | 查看提交記錄 |
| 命令形式 | git log [option] |
| 可選參數(shù)(options) | - --all:顯示所有分支- --pretty=oneline:將提交信息顯示為一行- --abbrev-commit:使得輸出的 commitId 更簡短- --graph:以圖的形式顯示 |
| 別名說明 | 在 3.1.3 中配置的別名git-log包含這些參數(shù),后續(xù)可直接使用git-log指令 |
解讀:
git log是追溯代碼版本歷史的關(guān)鍵指令,通過不同參數(shù)可定制輸出形式。
--all能跨分支查看提交,--pretty=oneline簡化信息展示,--abbrev-commit縮短 commitId 提升可讀性,--graph則以可視化圖形呈現(xiàn)分支合并歷史,這些參數(shù)讓開發(fā)者能高效定位歷史版本、分析分支演進。
git log --pretty=oneline --abbrev-commit --all --graph
版本回退
| 維度 | 核心信息 |
|---|---|
| 作用 | 版本切換 |
| 命令形式 | git reset --hard commitID |
| commitID 查看方式 | 可使用 git-log 或 git log 指令查看 |
| 已刪除提交記錄查看 | 可通過 git reflog 命令查看已經(jīng)刪除的提交記錄 |
解讀:
版本回退是 Git 應(yīng)對代碼錯誤、需求變更的關(guān)鍵能力。
git reset --hard commitID 可讓代碼庫直接切換到指定 commitID 對應(yīng)的版本;git reflog 則能追溯包括已刪除提交在內(nèi)的所有操作歷史,為版本恢復(fù)提供了兜底保障,是 Git “時光回溯” 特性的重要支撐
添加文件至忽略列表
| 維度 | 核心信息 |
|---|---|
| 適用場景 | 存在無需 Git 管理的文件(如自動生成的日志文件、編譯臨時文件等),且不希望其出現(xiàn)在未跟蹤文件列表 |
| 實現(xiàn)方式 | 在工作目錄中創(chuàng)建名為 .gitignore 的文件(文件名固定),列出需忽略的文件模式 |
| 示例說明 | 以下是 .gitignore 規(guī)則示例及含義:- # no .a files:注釋,說明規(guī)則意圖- *.a:忽略所有以 .a 為后綴的文件- !lib.a:例外規(guī)則,即使上一條忽略 *.a,仍跟蹤 lib.a 文件- /TODO:僅忽略當(dāng)前目錄下的 TODO 文件,不忽略子目錄中的 TODO 文件- build/:忽略 build 目錄下的所有文件- doc/*.txt:忽略 doc 目錄下所有以 .txt 為后綴的文件,但不忽略 doc/server/arch.txt- doc/**/*.pdf:忽略 doc 目錄及其所有子目錄中以 .pdf 為后綴的文件 |
解讀:
.gitignore 是 Git 管理 “無需版本控制文件” 的核心機制,通過靈活的規(guī)則語法(通配符、例外、目錄級控制等),可精準(zhǔn)排除日志、臨時文件、編譯產(chǎn)物等非業(yè)務(wù)代碼文件,既避免這些文件干擾版本管理,又能確保真正需要跟蹤的文件被正確納入版本控制,是保障代碼倉庫整潔性的關(guān)鍵配置。
分支
幾乎所有的版本控制系統(tǒng)都以某種形式支持分支。
使用分支意味著你可以把你的工作從開發(fā)主線上分離開來進行重大的 Bug 修改、開發(fā)新的功能,以免影響開發(fā)主線。
查看本地分支
- 命令: git branch
創(chuàng)建本地分支
- 命令: git branch 分支名
切換分支 (checkout)
- 命令: git checkout 分支名
- 我們還可以直接切換到一個不存在的分支(創(chuàng)建并切換)
- 命令: git checkout -b 分支名 創(chuàng)建并切換
合并分支 (merge)
一個分支上的提交可以合并到另一個分支
命令: git merge 分支名稱
刪除分支
規(guī)則:不能刪除當(dāng)前分支,僅可刪除其他分支。
命令及說明:
git branch -d 分支名:刪除分支時會進行各種檢查,確保操作安全性。git branch -D 分支名:不做任何檢查,強制刪除分支。
解決沖突
場景:當(dāng)兩個分支同時修改同一文件的同一行時,Git 無法自動合并,需手動解決沖突。
步驟:
- 處理文件中標(biāo)記的沖突區(qū)域(Git 會在文件中用特殊標(biāo)記標(biāo)注沖突部分)。
- 將解決沖突后的文件添加到暫存區(qū)(執(zhí)行
git add 文件名)。 - 提交到本地倉庫(執(zhí)行
git commit -m "解決沖突")。
說明:沖突解決是 Git 分支協(xié)作中的關(guān)鍵環(huán)節(jié),確保代碼合并后邏輯正確,避免因沖突導(dǎo)致功能異常。

開發(fā)中分支使用原則與流程
核心作用:
- 通過分支將工作從開發(fā)主線分離,實現(xiàn)重大 Bug 修改、新功能開發(fā)時不影響主線穩(wěn)定性。
各分支說明:
- master(生產(chǎn))分支:線上主分支,對應(yīng)中小規(guī)模項目的線上運行應(yīng)用,是代碼最終上線的載體。
- develop(開發(fā))分支:從 master 創(chuàng)建,為開發(fā)部門主要開發(fā)分支,無并行開發(fā)不同期上線要求時在此開發(fā),階段開發(fā)完成后合并到 master 準(zhǔn)備上線。
- feature/xxxx 分支:從 develop 創(chuàng)建,用于同期并行開發(fā)但不同期上線的功能,研發(fā)任務(wù)完成后合并到 develop。
- hotfix/xxxx 分支:從 master 派生,用于線上 Bug 修復(fù),修復(fù)完成后需合并到 master、test、develop 分支。
- 其他分支:如 test 分支(用于代碼測試)、pre 分支(預(yù)上線分支)等,承擔(dān)特定階段的研發(fā)或測試任務(wù)。

遠程倉庫
常用的托管服務(wù) [遠程倉庫]
前面我們已經(jīng)知道了 Git 中存在兩種類型的倉庫,即本地倉庫和遠程倉庫。那么我們?nèi)绾未罱?Git 遠程倉庫呢?我們可以借助互聯(lián)網(wǎng)上提供的一些代碼托管服務(wù)來實現(xiàn),其中比較常用的有 GitHub、碼云、GitLab 等。
- GitHub(地址:https://github.com/)是一個面向開源及私有軟件項目的托管平臺,因為只支持 Git 作為唯一的版本庫格式進行托管,故名 GitHub
- 碼云(地址:https://gitee.com/)是國內(nèi)的一個代碼托管平臺,由于服務(wù)器在國內(nèi),所以相比于 GitHub,碼云速度會更快
- GitLab(地址:https://about.gitlab.com/)是一個用于倉庫管理系統(tǒng)的開源項目,使用 Git 作為代碼管理工具,并在此基礎(chǔ)上搭建起來的 web 服務(wù),一般用于在企業(yè)、學(xué)校等內(nèi)部網(wǎng)絡(luò)搭建 git 私服。
實際使用
本文檔使用碼云,現(xiàn)在碼云上注冊一個賬號,點擊右上角加號,選擇新建倉庫
注意,不要選擇下面的三個選項


配置SSH公鑰
- 生成 SSH 公鑰
- 執(zhí)行命令
ssh-keygen -t rsa,然后不斷回車即可生成。若已有公鑰,此操作會自動覆蓋。
- 獲取公鑰
- 執(zhí)行命令
cat ~/.ssh/id_rsa.pub可查看生成的公鑰內(nèi)容。
- Gitee 設(shè)置賬戶公共鑰
- 登錄 Gitee 后,依次點擊設(shè)置→SSH 公鑰,在 “標(biāo)題” 處可隨便起個名字,然后將公鑰粘貼到指定輸入框,點擊確定即可完成設(shè)置。
- 驗證是否配置成功
- 執(zhí)行命令
ssh -T git@gitee.com,若返回相關(guān)成功提示信息,則說明配置成功。
操作遠程倉庫
- 綁定ssh


添加遠程倉庫
此操作是先初始化本地庫,然后與已創(chuàng)建的遠程庫進行對接。
命令:git remote add <遠端名稱> < 倉庫路徑 >
- 遠端名稱,默認(rèn)是 origin,取決于遠端服務(wù)器設(shè)置
- 倉庫路徑,從遠端服務(wù)器獲取此 URL
- git remote add origin git@gitee.com:czbk_zhang_meng/git_test.git
查看遠程倉庫
命令:git remote
推送到遠程倉庫
命令:git push [-f] [–set-upstream] [遠端名稱 [本地分支名]:[遠端分支名]]
如果遠程分支名和本地分支名稱相同,則可以只寫本地分支
- git push origin master
- -f 表示強制覆蓋
- –set-upstream 推送到遠端的同時并且建立起和遠端分支的關(guān)聯(lián)關(guān)系。
git push --set-upstream origin master
如果當(dāng)前分支已經(jīng)和遠端分支關(guān)聯(lián),則可以省略分支名和遠端名。
- git push 將 master 分支推送到已關(guān)聯(lián)的遠端分支。

查看關(guān)聯(lián)關(guān)系的命令
可通過 git branch -vv 命令查看本地分支與遠程分支的關(guān)聯(lián)情況。
克隆命令
命令格式為 git clone <倉庫路徑> [本地目錄]。其中,本地目錄可省略,省略時會自動生成與遠程倉庫同名的目錄。
Git 從遠程倉庫抓取和拉取
- 抓?。╣it fetch)
- 命令格式:
git fetch [remote name] [branch name] - 作用:將遠程倉庫的更新抓取到本地,但不會自動進行合并操作。
- 拓展:若不指定遠端名稱和分支名,會抓取所有分支的更新。
- 拉?。╣it p ull)
- 命令格式:
git pull [remote name] [branch name] - 作用:將遠程倉庫的修改拉到本地并自動進行合并,等同于
git fetch+git merge操作。 - 拓展:若不指定遠端名稱和分支名,會抓取所有分支的更新并更新當(dāng)前分支。
這兩個操作的核心目的是將遠程倉庫的變更同步到本地,其中fetch更靈活(可先查看更新再決定是否合并),pull更便捷(一步完成抓取和合并),開發(fā)者可根據(jù)場景選擇使用
Git 合并沖突解決的說明內(nèi)容,核心信息如下:
- 沖突場景
當(dāng) A、B 用戶在同一時間段修改了同一個文件的同一行位置代碼,A 先將修改推送到遠程倉庫,B 在拉取遠程倉庫更新時會發(fā)生合并沖突。
- 沖突解決流程(以 B 用戶為例)
- 執(zhí)行
git pull(等同于fetch + merge)拉取遠程更新,此時因代碼沖突會觸發(fā)合并沖突。 - 解決沖突的方式與本地分支沖突解決方法一致,需手動處理沖突文件中標(biāo)記的沖突內(nèi)容,然后提交完成合并,再執(zhí)行
git push推送到遠程分支。
- 原理說明
遠程分支本質(zhì)上也是分支,因此合并沖突的產(chǎn)生和解決邏輯與本地分支間的合并沖突完全相同,都是因代碼修改的重疊導(dǎo)致,需通過人工介入明確最終代碼邏輯。
###################1 - 將本地倉庫推送到遠程倉庫 完成 4.1、4.2、4.3、4.4 的操作 略 [git_test01] 添加遠程倉庫 git remote add origin git@gitee.com//.git [git_test01] 將 master 分支推送到遠程倉庫,并與遠程倉庫的 master 分支綁定關(guān)聯(lián)關(guān)系 git push --set-upstream origin master ###################2 - 將遠程倉庫克隆到本地 將遠程倉庫克隆到本地 git_test02 目錄下 git clone git@gitee.com//.git git_test02 [git_test02] 以精簡的方式顯示提交記錄 git-log ###################3 - 將本地修改推送到遠程倉庫 [git_test01] 創(chuàng)建文件 file03.txt 略 [git_test01] 將修改加入暫存區(qū)并提交到倉庫,提交記錄內(nèi)容為: add file03 git add .git commit -m 'add file03' [git_test01] 將 master 分支的修改推送到遠程倉庫 git push origin master ###################4 - 將遠程倉庫的修改更新到本地 [git_test02] 將遠程倉庫修改再拉取到本地 git pull 以精簡的方式顯示提交記錄 git-log 查看文件變化 (目錄下也出現(xiàn)了 file03.txt)
##############3 - 將本地修改推送到遠程倉庫 [git_test01] 創(chuàng)建文件 file03.txt 略 [git_test01] 將修改加入暫存區(qū)并提交到倉庫,提交記錄內(nèi)容為: add file03 git add .git commit -m ‘a(chǎn)dd file03' [git_test01] 將 master 分支的修改推送到遠程倉庫 git push origin master ###################4 - 將遠程倉庫的修改更新到本地 [git_test02] 將遠程倉庫修改再拉取到本地 git pull 以精簡的方式顯示提交記錄 git-log 查看文件變化 (目錄下也出現(xiàn)了 file03.txt)
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
ASP,PHP與.NET偽造HTTP-REFERER方法及防止偽造REFERER方法探討
ASP,PHP與.NET偽造HTTP-REFERER方法及防止偽造REFERER方法探討...2007-03-03
ffmpeg網(wǎng)頁視頻流m3u8 ts實現(xiàn)視頻下載
這篇文章主要為大家介紹了ffmpeg網(wǎng)頁視頻流m3u8 ts實現(xiàn)視頻下載詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-07-07
關(guān)于VSCode 裝好ESLint 插件 import 報黃線的問題
這篇文章主要介紹了VSCode 裝好ESLint 插件 import 報黃線的問題,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-11-11

