目錄
一、基礎理論片
Git簡介
Git安裝
Git倉庫
Git基本命令用法
倉庫別名
二、實操命令篇
遠程分支
分支的新建和合并
實操演示
1 本地新建倉庫
2 gitee新建倉庫
3 建立關系
4 新建分支
5 開發新功能
6 推送新分支
7 合并新分支到主分支
三、可視化工具篇
Gitee倉庫的使用
IDEA的git使用
IDEA與Gitee倉庫
四、Git 安全與配置篇
SSH key 與訪問控制
生成和配置 SSH key
如何設置 Git 倉庫權限(特別是私有倉庫)
.gitignore 和 .gitattributes
五、常見問題篇
如何解決沖突?
1 產生沖突的常見情況:
2 解決步驟:
上傳文件過大導致提交失敗?
如何回滾提交,回滾方式有哪些?
為什么不建議強制提交?
Rebase 與 Merge 的區別?
一、基礎理論篇
Git簡介
Git 是一種分布式版本控制系統,最初由 Linus Torvalds 開發,用于管理 Linux 內核代碼。
與集中式版本控制(如 SVN)不同,Git 每個開發者都有完整代碼倉庫副本,可在本地完成大部分操作。
主要特點:
-
分布式:支持離線操作。
-
高效:提交、切換、合并等操作快速。
-
安全:使用 SHA1 校驗內容完整性。
-
支持多種工作流:如 Git Flow、Feature Branch 等。
什么是集中式版本控制:
-
版本庫是集中存放在中央服務器的
-
而干活的時候,用的都是自己的電腦,所以要先從中央服務器取得最新的版本,然后開始干活
-
干完活了,再把自己的活推送給中央服務器
-
中央服務器就好比是一個圖書館,你要改一本書,必須先從圖書館借出來,然后回到家自己改,改完了,再放回圖書館
缺點:
-
集中式版本控制系統最大的毛病就是必須聯網才能工作
-
如果在局域網內還好,帶寬夠大,速度夠快
-
可如果在互聯網上,遇到網速慢的話,可能提交一個10M的文件就需要5分鐘,體驗極其不好
什么是分布式版本控制系統:
-
分布式版本控制系統根本沒有“中央服務器”,每個人的電腦上都是一個完整的版本庫,就不需要聯網了
-
Git 這種系統,客戶端并不只提取最新版本的文件快照, 而是把代碼倉庫完整地鏡像下來,包括完整的歷史記錄
-
那任何一處協同工作用的服務器發生故障,事后都可以用任何一個鏡像出來的本地倉庫恢復, 因為每一次的克隆操作,實際上都是一次對代碼倉庫的完整備份
-
它還以指定和若干不同的遠端代碼倉庫進行交互,因此你就可以在同一個項目中,分別和不同工作小組的人相互協作,可以根據需要設定不同的協作流程
Git安裝
Windows 安裝
-
下載地址:Git - Downloads
-
安裝步驟:一直默認下一步即可,建議安裝 Git Bash 工具。
-
驗證是否安裝成功:
git --version #查看git版本
輸出以下內容即為安裝成功:
對于首次安裝git環境的用戶來說需要做以下配置:
git config --global user.name "你的名字" # 配置git的用戶名
git config --global user.email "你的郵箱" # 配置git的郵箱
Git倉庫
1 什么是倉庫?
Git 倉庫是用來記錄代碼歷史版本的地方,分為:
-
本地倉庫(.git 文件夾)
-
遠程倉庫(如 Gitee、GitHub)
2 如何初始化git倉庫
git init # 初始化本地倉庫
執行完命令多了個.git文件(文件是隱藏的,需要打開隱藏可見),說明已經初始化好git的本地倉庫
結構圖如下所示:
MyProject/
├── .git/ ? ? ? ? ← Git 的核心目錄
├── index.html
└── style.css
3 如何克隆遠程倉庫
git clone 遠程倉庫的地址 # 這里可以克隆遠程倉庫的地址 例如gitee gitLab github等代碼托管平臺
Git基本命令用法
git status # 查看當前狀態
git add #文件名 暫存文件
git commit -m "說明" #提交到本地倉庫
git log 查看提交歷史
git diff #查看改動內容
git pull #拉取遠程更新
git push #推送本地提交
以上的命令式git基本命令中最常用到的一些命令
Git 工作區與版本控制結構圖:
工作區(Working Directory)↓ git add
暫存區(Stage/Index)↓ git commit
本地倉庫(Local Repository)↓ git push
遠程倉庫(Remote Repository)
針對以上命令,我們可以用剛剛生成的git倉庫來進行演練一下
倉庫別名
倉庫別名是為了簡化遠程地址的管理,尤其在多個遠程倉庫協同時非常有用
1 添加遠程倉庫
git remote add origin "遠程倉庫的地址url" # 這里可以是gitee gitLab等
這里的origin是本地倉庫,和遠程倉庫關聯在一起,也稱作遠程的別名
二、實操命令篇
遠程分支
遠程分支是對遠程 Git 倉庫中分支狀態的引用,本地并不能直接修改它們。Git 允許你從遠程倉庫獲取更新、創建追蹤分支(tracking branch),并推送你的更改。
概念 | 描述 |
---|---|
origin | 默認的遠程倉庫名(可以自定義別名)。 |
遠程分支 | 存儲在遠程倉庫中的分支,不能直接檢出修改,通常以 origin/branch 形式存在。 |
追蹤分支 | 本地分支與遠程分支關聯,一般用于同步遠程分支狀態(如:main 跟蹤 origin/main )。 |
同步遠程分支狀態 | 通過 git fetch 、git pull 等命令獲取最新狀態。 |
可通過一下命令查看遠程分支和本地分支的關系
git branch -r # 查看所有遠程分支
輸出示例:
origin/main
origin/dev
origin/feature/login
其中origin為本地分支,main、dev、login均為遠程分支
分支的新建和合并
#查看本地分支:
git branch#查看遠程分支:
git branch -r#查看本地 + 遠程所有分支:
git branch -a#新建分支并且切換分支
git branch feature/login
git checkout feature/login#等價于:
git checkout -b feature/login
實操演示
接下來我將從新建遠程倉庫和本地倉庫來進行代碼的分支。推送的演示,遠程倉庫我將采用gitee 代碼采用一個前端的工程項目
1 本地新建倉庫
我已經新建了一些文件,并且初始化了倉庫
2 gitee新建倉庫
已經在git上新建了遠程倉庫,接下來跟著上面的提示綁定關系
3 建立關系
通過下面的命令我們將我們的工程第一添加到gitee上面去
4 新建分支
這里我們新建分支并且切換到了新建的分支上去
5 開發新功能
這里模擬開發新功能,就是將代碼修改一下,可以新建一個login.html文件
6 推送新分支
這里我進行了新功能的分支添加
我們可以看見遠程倉庫有新的分支上面有登錄模塊的新功能
7 合并新分支到主分支
master分支上面是沒有最新的代碼的這里我們需要合并分支
合并分支之后還需要我們去推送代碼
git checkout master #切換到master分支
git merge feature/change #合并分支
git push # 推送最新代碼
三、可視化工具篇
Gitee倉庫的使用
上面已經向大家介紹了如何使用gitee倉庫去新建一個遠程倉庫,接下來我們將從編程工具IDEA去教大家如何去使用可視化界面操作git
IDEA的git使用
我們使用IDEA去打開我們剛剛創建的git倉庫
這里我改變登錄界面代碼 用IDEA去推送代碼
可以看見推送成功
接下來我們將推送的代碼合并到feature/change上面去
IDEA與Gitee倉庫
JetBrains 出品的 IDEA(IntelliJ IDEA) 是一款功能強大的 Java 集成開發環境,不僅支持豐富的編程功能,還內置了對 Git 版本控制系統 的深度集成,極大地方便了開發者的日常協作與代碼管理工作。
IDEA 與 Gitee 倉庫配合使用,
四、Git 安全與配置篇
SSH key 與訪問控制
Git 支持兩種方式訪問遠程倉庫:HTTPS
和 SSH
。
-
HTTPS:每次操作都需要輸入用戶名和密碼(可以配合 Token 簡化)。
-
SSH:使用密鑰對加密認證,更安全便捷,是企業和團隊首選。
優點:
-
避免頻繁輸入賬號密碼;
-
安全性更高(基于公鑰加密);
-
適合自動化部署和多設備操作。
生成和配置 SSH key
在gitee倉庫的頁面選擇ssh克隆地址,選擇生成RSA密鑰 確保C盤下面有.ssh文件 沒有可以新建一個
輸出以下內容就是配置成功
如何設置 Git 倉庫權限(特別是私有倉庫)
創建私有倉庫
-
在 Gitee 上新建倉庫時選擇 “私有”;
-
私有倉庫默認僅創建者可訪問。
添加協作者權限
-
打開你的倉庫 → 設置 → 成員管理;
-
邀請他人加入,分配權限(只讀、寫入、管理員)。
.gitignore 和 .gitattributes
.gitignore
:忽略哪些文件不提交
-
作用:告訴 Git 哪些文件不需要納入版本控制;
-
常用于:臨時文件、日志文件、編譯產物、操作系統自動生成文件等。
# 忽略編譯產物 *.class *.exe *.jar ? # 忽略 node_modules 目錄 node_modules/ ? # 忽略日志文件 *.log ? # 忽略 IDE 配置 .idea/ .vscode/
五、常見問題篇
如何解決沖突?
沖突是指在多個分支合并時,Git 無法自動決定哪個版本應該保留。
1 產生沖突的常見情況:
-
兩個分支修改了同一文件的同一行內容;
-
一個分支刪除了某文件,另一個分支卻修改了該文件。
2 解決步驟:
-
執行合并操作(例如:)
git merge feature/login #合并修改了的分支
-
出現沖突時 Git 會提示哪些文件沖突。
-
打開沖突文件,查看沖突標識:
text復制編輯<<<<<<< HEAD 當前分支的內容 ======= 被合并分支的內容 >>>>>>> feature/login
-
手動選擇保留哪一部分內容,然后刪除沖突標記。
-
標記沖突已解決,提交即可:
git add . git commit -m "解決沖突"
接下來我將從用剛才上面展示的項目去模擬沖突,接下來我將用IDEA去操作
1 在master分支修改login.html文件并且提交
2 在feature/change分支修改login.html文件并且提交
3 嘗試合并分支
上傳文件過大導致提交失敗?
git一般默認不提交較大的文件(最大100M),如果需要可以嘗試分階段提交,也可以在配置文件中去修改參數、在隱藏的.git文件中config文件修改參數即可
如何回滾提交,回滾方式有哪些?
Git 提供多個回滾手段,視場景而定:
命令 | 用途 | 是否會改歷史提交 |
---|---|---|
git reset | 重置到某個提交點 | 是(慎用) |
git revert | 撤銷某次提交,生成一個新的“反向提交” | 否(推薦) |
git checkout -- 文件名 | 撤銷工作區的修改 | 否 |
git restore | 新版本替代了 checkout 的功能 | 否 |
例子:
-
回滾到上一次提交(保留工作目錄):
git reset --soft HEAD~1
-
回滾某次提交(保留記錄):
git revert <commit-id>
使用以下命令可以回滾提交并且撤銷commit和add 保留工作區的內容
git reset --mixed HEAD~1
關于 git revert:
我們不小心提交了“增加登錄功能”,現在想撤銷該提交的影響,但不想破壞提交歷史(比如已經 push 到遠程)。
git revert c7d23bb
為什么不建議強制提交?
風險:
-
git push -f
(強制推送)會覆蓋遠程分支歷史,破壞團隊協作; -
其他成員無法拉取或丟失歷史記錄;
-
容易導致不可恢復的數據丟失。
建議:
-
在多人協作項目中,不要輕易使用
-f
,除非全員知情或在 feature 分支上開發。 -
如果需要清理歷史,使用
rebase
并確認只有你使用該分支時才推送。
Rebase 與 Merge 的區別?
特點 | Merge | Rebase |
---|---|---|
定義 | 將兩個分支的歷史合并,產生一個新的“合并提交”(merge commit)。 | 把一個分支的提交“移動”到另一個分支的最新提交之后,重寫提交歷史。 |
提交歷史 | 保留了兩個分支的完整歷史,會出現分叉和合并節點。 | 會生成一條線性的提交歷史,看起來更“干凈”。 |
合并過程 | 創建一個新的合并提交,把兩個分支的改動合并起來。 | 將目標分支的最新提交“放到前面”,再依次應用當前分支的提交。 |
沖突處理 | 沖突在合并提交時處理一次。 | 沖突可能在每個提交應用時都要處理。 |
是否改寫歷史 | 不改寫已有提交歷史。 | 改寫提交歷史(對公共分支使用需謹慎)。 |
適用場景 | 適合保留分支的所有合并歷史,適合多人協作時使用。 | 適合想讓提交歷史更清晰,或者需要整理提交記錄時使用。 |