參考博客:Git(分布式版本控制工具)_為什么嗶哩嗶哩有些視頻沒有字幕-CSDN博客
Git就是一個類似于百度云盤的倉庫;重點是要掌握使用idea操作Git,企業用的最多,一般不會去使用命令
Git通過不斷階段保存文件來實現版本控制,比如備份,版本還原等等
每修改一次就認為是一個版本,這個版本是誰寫的,加上版本號
git記錄了開發的全過程,誰在什么時間做了什么事情都可以看得很清楚
git開發到一定階段就可以設置一個標簽并設置當前代碼開發的版本,就像軟件的版本一樣,設置了標簽,當前標簽里面的內容就不會變化了,你提交的代碼是不會影響到標簽的
目錄
1. 概述
1.1 開發中的實際場景
1.2 版本控制器的方法
1.3 Git工作流程
2. Git安裝
2.1 下載安裝
2.2 Git環境配置
3. 基礎操作指令
4. 分支
5. Git遠程倉庫
5.1、常用的托管服務[遠程倉庫]
5.2 使用碼云
5.3 操作遠程倉庫
6. 在Idea中使用Git
1. 概述
1.1 開發中的實際場景
-
場景一:備份
-
場景二:代碼還原
-
場景三:協同開發
-
場景四:追溯問題代碼的編寫人和編寫時間
1.2 版本控制器的方法
集中式版本控制工具(SVN和CVS)
集中式版本控制工具,版本庫是集中存放在中央服務器的,team里每個人work時從中央服務器下載代碼,是必須聯網才能工作。個人修改后然后提交到中央版本庫。
分布式版本控制工具(Git)
分布式版本控制系統沒有“中央服務器”,每個人的電腦上都是一個完整的版本庫,這樣工作的時候,無需要聯網了。多人協作只需要各自的修改推送給對方,就能互相看到對方的修改了。
1.3 Git工作流程
命令如下:
1. clone (克隆): 從遠程倉庫中克隆代碼到本地倉庫 2. checkout (檢出): 從本地倉庫中檢出一個倉庫分支然后進行修訂 3. add (添加): 在提交前先將代碼提交到暫存區 4. commit (提交): 提交到本地倉庫。本地倉庫中保存修改的各個歷史版本 5. fetch (抓取): 從遠程庫,抓取到本地倉庫,不進行任何的合并動作,一般操作比較少。 6. pull (拉取): 從遠程庫拉到本地庫,自動進行合并(merge),然后放到到工作區,相當于fetch+merge 7. push (推送): 修改完成后,需要和團隊成員共享代碼時,將代碼推送到遠程倉庫
2. Git安裝
2.1 下載安裝
下載地址(適合Win):Git - Downloading Package
選擇下載對應的軟件安裝包:
?
1.獨立安裝程序(Standalone Installer):將Git for Windows直接安裝到計算機上,使其成為系統的一部分。 2.便攜版(Portable):也被稱為“存儲在可移動設備上的版本”。便攜版可以在沒有安裝過程的情況下直接運行,非常適合攜帶在便攜式存儲設備(如USB閃存驅動器)中使用,方便在不同計算機之間使用Git。
winget
安裝的方式:winget install --id Git.Git -e --source winget
下載完成后可以得到如下安裝文件:
?
雙擊下載的安裝文件來安裝Git:
?
選擇安裝目錄:
?
選擇安裝的組件:(一般默認就夠用)
?
1.Windows Explorer integration(Windows資源管理器集成):選擇此選項后,Git會將一些功能集成到Windows資源管理器中。 2.Git Bash Here:通過該選項打開Git Bash終端并自動切換到所選文件或文件夾所在的目錄。 3.Git GUI Here:通過該選項打開Git GUI圖形化界面并自動切換到所選文件或文件夾所在的目錄。 4.Git LFS (Large File Support):安裝Git LFS擴展,用于管理大型文件,如圖像、音頻和視頻文件。 5.Asociate .git* configuration files with the default text editor:Git會關聯.gtiignore、.gitattributes等擴展名為.gt+的配置文件與系統默認的文本編輯器,可以直接雙擊這些文件,在默認文本編輯器中打開并進行編輯。 6.Associate .sh files to be run with Bash:Git會關聯.sh擴展名的文件與Bash終端,可以直接雙擊.sh文件,在Bash終端中運行腳本。 7.Check daily for Git for Windows updates:每天檢查是否有Git for Windows的更新版本,并在有更新時提醒你進行更新。 8.(NEW!) Add a Git Bash Profile to Windows Terminal:Git會將一個Git Bash配置文件添加到Windows Terminal中。 9.(NEW!) Scalar (Git add-on to manage large scale repositories):這是一個Git的附加組件,用于管理大規模倉庫。
開始菜單目錄:
?
默認編輯器選擇:(也可以選擇vscode的)
?
初始化新項目的主干名稱:
?
1.Let Git decide:2.28版本之前的默認行為。即在創建新的倉庫時,Git會使用默認的分支名稱master。 2.Override the default branch name for new repositories(覆蓋新的默認分支名稱):可以將默認分支更改為其他名稱(如main)。很多團隊已經重命名默認主干名為main,包括github創建的代碼倉庫也是默認的main主干。
調整環境變量:(默認)
?
1.僅使用Git Bash中的Git:(最謹慎),它不會修改系統環境變量(PATH),只能在Git Bash中使用Git命令行工具。 2.從命令行和第三方軟件中使用Git:(推薦),它會將一些最基本的Git包裝器添加到你的系統環境變量(PATH),以避免在環境中混亂地添加可選的Unix工具,將能夠從Git Bash、命令提示符和Windows PowerShell中使用Git,并且可以在PATH中尋找Git的任何第三方軟件。 3.從命令提示符中使用Git和可選的Unix工具:將Git和可選的Unix工具都添加到你的系統環境變量(PATH)中,這將覆蓋Windows中的一些工具(如"find"和"sort")。
選擇SSH可執行文件:(默認)
?
1.Use bundled OpenSSH(使用捆綁的OpenSSH):使用Git自帶的ssh.exe。Git將會安裝自己的OpenSSH。 2.Use external OpenSSH(使用外部OpenSSH):Git不會安裝自己的OpenSSH,而是使用在系統環境變量PATH中找到的OpenSSH。
選擇HTTPS后端傳輸:
?
1.使用OpenSSL庫:將指示Git使用OpenSSL庫來處理HTTPS連接。OpenSSL是一種廣泛使用的開源SSL/TLS庫,提供了安全的加密和身份驗證功能。選擇此選項后,Git將使用預配置的ca-bundle.crt文件來驗證服務器證書。這個文件中包含了受信任的根證書,用于驗證遠程服務器的證書是否有效和可信任。 2.使用本機Windows Secure Channel庫:將指示Git使用Windows本地的Secure Channel庫來處理HTTPS連接。這個庫是Windows操作系統提供的默認SSL/TLS實現,能夠與Windows證書存儲一起工作。選擇此選項后,Git將使用Windows證書存儲來驗證服務器證書。
配置行尾轉換:(選擇第一個)
?
1.Checkout Windows style, commit Unix style line endings:在檢出(checkout)文本文件時,Git會將行尾符號LF(Unix風格)自動轉換為CRLF(Windows風格)。而在提交(commit)文本文件時,Git會將行尾符號CRLF轉換回LF。這適用于跨平臺項目。 2.Checkout as-is, commit Unix-style line endings:在檢出文本文件時保持原樣,但是在提交文本文件時,Git會將行尾符號CRLF轉換為LF。這適用于跨平臺項目,特別是在Unix環境下進行開發。 3.Checkout as-is, commit as-is:在檢出和提交文本文件時都不執行行尾符號的轉換,保持原樣。
配置Git Bash使用的終端模擬器:(默認)(cmd的劣勢是較大的)
?
1.使用MinTTY:Git Bash將使用MinTTY作為終端仿真器。MinTTY具有可調整大小的窗口、非矩形選擇以及Unicode字體的特性。它適用于與Win32控制臺程序(如交互式Python或node.js)一起使用,并提供更好的兼容性和功能。在MinTTY環境下運行Windows控制臺程序時,需要使用"winpty"來啟動。 2.使用Windows默認控制臺窗口:將使用Windows的默認控制臺窗口(cmd.exe)作為終端仿真器。
git pull默認行為:(默認)
?
1.Default (fast forward or merge):git pull的標準行為;如果可能,將當前分支快進到被拉取的分支,否則創建一個合并提交。 2.Rebase:將當前分支變基到被拉取的分支上。如果沒有本地提交需要變基,則相當于快進操作。 3.Only ever fast-forward:只進行快進操作,將當前分支快進到被拉取的分支。如果不可行,則操作失敗。
選擇憑證助手:(默認)
?
1.Git Credential Manager:使用跨平臺的Git Credential Manager(GCM)。 2.None:不使用憑據助手。在需要身份驗證時,每次都會要求手動輸入憑據。
配置額外選項:(可以默認)(存在風險錯誤)
?
1.啟用偽終端的實驗性支持:可以在Git Bash窗口中運行原生的控制臺程序,而無需使用 winpty。 2.啟用內置文件系統監視器的實驗性支持:Git將自動運行一個內置的文件系統監視器。
安裝完成:
?
命令行窗口輸入git --version
或者git -v
可以驗證一下:
?
安裝完成后在電腦桌面(也可以是其他目錄)點擊右鍵更多選項,看是否能看到如下兩個菜單:
?
Git GUI:Git提供的圖形界面工具 Git Bash:Git提供的命令行工具
在vscode中找到Terminal工具欄,輸入“git help”驗證是否能夠調用git說明,看是否可以調用:
?
2.2 Git環境配置
Git其他配置參考:秒懂Git之配置(配置git默認編輯器為vscode或者notepad++)_git默認編輯器選什么好-CSDN博客
【打開命令行工具(cmd/vscode的終端/Git Bash)都可以】
(1)設置用戶信息:推薦綁定GitHub
git config --global user.name "用戶名" git config --global user.email "郵箱"?
查看配置信息驗證:
git config --global user.name git config --global user.email
?
?
(2)為常用指令配置別名
打開用戶目錄,創建.bashrc
文件:部分windows系統不允許用戶創建點號開頭的文件,可以打開gitBash
,執行touch ~/.bashrc
?
在.bashrc
文件中輸入如下內容:
#用于輸出git提交日志 alias git-log='git log --pretty=oneline --all --graph --abbrev-commit' #用于輸出當前目錄所有文件及基本信息 alias ll='ls -al'
執行source ~/.bashrc
生效。
(3)解決GitBash
亂碼問題
GitBash
執行:
git config --global core.quotepath false
在${git_home}/etc/bash.bashrc
文件最后加入下面兩行:
export LANG="zh_CN.UTF-8" export LC_ALL="zh_CN.UTF-8"?
(4)獲取本地倉庫
要使用Git對代碼進行版本控制,首先需要獲得本地倉庫
1)在電腦的任意位置創建一個空目錄作為本地Git倉庫
2)進入這個目錄中,點擊右鍵打開Git bash
窗口
3)執行命令git init
4)如果創建成功后可在文件夾下看到隱藏的.git
目錄。
?
3. 基礎操作指令
Git 對于文件修改的狀態:
?
-
git status
:查看文件的修改狀態; -
git add .
:提交當前目錄所有文件到暫存區,git add 文件名
提交單個文件; -
git commit
:提交暫存區到本地倉庫,git commit -m '注釋內容'
提交暫存區內容到本地倉庫的當前分支 -
git log [option]
:查看提交日志-
options
-
--all
顯示所有分支 -
--pretty=oneline
將提交信息顯示為一行 -
--abbrev-commit
使得輸出的commitId
更簡短 -
--graph
以圖的形式顯示
-
-
-
git reset --hard commitID
:版本退回
?
-
git reflog
:查看已刪除的記錄 -
clear
:清空命令行
示例:
#####################倉庫初始化######################
# 創建目錄一個空目錄并在目錄下打開gitbash
# 初始化git倉庫
git init
#####################創建文件并提交#####################
# 目錄下創建文件 file01.txt
touch file01.txt
# 將修改加入暫存區
git add .
# 將修改提交到本地倉庫,提交記錄內容為:commit 001
git commit -m 'commit 001'
# 查看日志
git log
####################修改文件并提交######################
# 修改file01的內容為:count=1
vim file01.txt
# 將修改加入暫存區
git add .
# # 將修改提交到本地倉庫,提交記錄內容為:update file01
git commit --m 'update file01'
# 查看日志
git log
# 以精簡的方式顯示提交記錄
git-log
####################將最后一次修改還原##################
# 查看提交記錄
git-log
# 找到倒數第2次提交的commitID
略
# 版本回退
git reset commitID --hard
4. 分支
幾乎所有的版本控制系統都以某種形式支持分支。 使用分支意味著可以把工作從開發主線上分離開來進行重大的Bug修改、開發新的功能,以免影響開發主線。
-
git branch
:查看本地分支 -
git branch 分支名
:創建本地分支 -
git checkout 分支名
:切換分支 -
git checkout -b 分支名
:直接切換到一個不存在的分支(創建并切換) -
git merge 分支名稱
:一個分支上的提交可以合并到另一個分支
不能刪除當前分支,只能刪除其他分支
-
git branch -d b1
:刪除分支時,需要做各種檢查 -
git branch -D b1
:不做任何檢查,強制刪除
?
當兩個分支上對文件的修改可能會存在沖突,例如同時修改了同一個文件的同一行,這時就需要手動解決沖突,解決沖突步驟如下:
1. 處理文件中沖突的地方 2. 將解決完沖突的文件加入暫存區(add) 3. 提交到倉庫(commit)
沖突部分的內容處理如下所示:
?
分支使用流程圖:
?
?
5. Git遠程倉庫
5.1、常用的托管服務[遠程倉庫]
-
GitHub
:https://github.com/-
面向開源及私有軟件項目的托管平臺,因為只支持Git作為唯一的版本庫格式進行托管,故名
gitHub
-
-
Gitee(碼云)
:Gitee - 基于 Git 的代碼托管和研發協作平臺-
國內的一個代碼托管平臺,由于服務器在國內,所以相比于GitHub,碼云速度會更快
-
-
GitLab
:https://about.gitlab.com/-
用于倉庫管理系統的開源項目,使用Git作為代碼管理工具,并在此基礎上搭建起來的web服務,一般用于在企業、學校等內部網絡搭建git私服,需要部署。
-
5.2 使用碼云
(1)注冊碼云:注冊 - Gitee.com
(2)創建遠程倉庫
?
倉庫創建完成后可以看到倉庫地址:
?
(3)配置SSH公鑰
-
生成SSH公鑰(如果公鑰已經存在,則自動覆蓋)
-
ssh-keygen -t rsa
-
不斷回車
-
-
?
Gitee
設置賬戶共公鑰???-
獲取公鑰:
cat ~/.ssh/id_rsa.pub
-
-
-
用戶 - 設置 - SSH公鑰
-
-
-
驗證是否配置成功:
ssh -T git@gitee.com
-
5.3 操作遠程倉庫
(1)添加遠程倉庫:先初始化本地庫,再與已創建的遠程庫進行對接
-
git remote add <遠端名稱> <倉庫路徑>
-
遠端名稱,默認是origin,取決于遠端服務器設置
-
倉庫路徑,從遠端服務器獲取此URL
-
(2)查看遠程倉庫:git remote
?
(3)推送到遠程倉庫
-
git push [-f] [--set-upstream] [遠端名稱 [本地分支名][:遠端分支名] ]
-
如果遠程分支名和本地分支名稱相同,則可以只寫本地分支:
git push origin main
-
-f
表示強制覆蓋 -
--set-upstream
推送到遠端的同時并且建立起和遠端分支的關聯關系 -
如果當前分支已經和遠端分支關聯,則可以省略分支名和遠端名:
git push
-
?
(4)查詢遠程倉庫
?
查詢當前 Git 倉庫配置的遠程倉庫地址:git remote -vv
(5)本地分支與遠程分支的關聯關系
-
查看關聯關系:
git branch -vv
??
(6)從遠程倉庫克隆
-
git clone <倉庫路徑> [本地目錄]
?
(7)從遠程倉庫中抓取和拉取
-
抓取命令:
git fetch [remote name] [branch name]
-
將倉庫里的更新都抓取到本地,不會進行合并
-
-
拉取命令:
git pull [remote name] [branch name]
-
將遠端倉庫的修改拉到本地并自動進行合并,等同于fetch+merge
-
如果不指定遠端名稱和分支名,則抓取所有并更新當前分支
-
命令 | 獲取遠程更新 | 自動合并到本地分支 | 是否修改本地代碼 |
---|---|---|---|
git fetch | ? 是 | ? 否 | ? 否 |
git pull | ? 是 | ? 是 | ? 是 |
(8)解決合并沖突
-
在一段時間,A、B用戶修改了同一個文件,且修改了同一行位置的代碼,此時會發生合并沖突。
-
A用戶在本地修改代碼后優先推送到遠程倉庫,此時B用戶在本地修訂代碼,提交到本地倉庫后,也需要推送到遠程倉庫,此時B用戶晚于A用戶,故需要先拉取遠程倉庫的提交,經過合并后才能推送到遠端分支。
?
?
6. 在Idea中使用Git
打開 IntelliJ IDEA,如果 Git 安裝在默認路徑下,那么idea會自動找到git的位置,如果更改了 Git 的安裝位置則需要手動配置下Git的路徑(新版也能自動識別)。選擇 File→Settings 打開設置窗口,找到 Version Control 下的 git 選項:
詳情參考:Idea中使用Git詳細教學_idea配置git-CSDN博客