史上最全 Git 圖文教程,沒有之一
共 15108字,需瀏覽 31分鐘
·
2024-07-29 07:43
閱讀本文大概需要 4 分鐘。
來自:juejin.cn/post/7245176801491894333
Git安裝
安裝
https://git-scm.com/
Windows 系統(tǒng)直接下載 .exe文件即可,macOS 系統(tǒng)使用Homebrew命令行安裝,終端輸入git --version確認安裝
Git Base Here 選項,有就成功了
介紹
-
工作區(qū): 處理工作的區(qū)域 -
暫存區(qū): 臨時存放的區(qū)域 -
本地git倉庫: 最終的存放區(qū)域
-
工作區(qū): 在你電腦里看到的目錄 -
暫存區(qū): 在.git文件夾內(nèi)的index中 (二進制記錄) -
版本庫: 指的整個.git文件夾 (也認為是本地倉庫)
Git使用
Git配置
-
git config: 固定命令,設置git相關配置 -
--global: 全局配置;一次配置,整機在使用git時都生效
git config --global user.name 你的用戶名
git config --global user.email 你的郵箱地址
git config --list
#如果信息太多,可以輸入 q 退出
文件右側(cè)標記
-
M:已修改(Modified) - 文件已被修改但還沒有被添加到暫存區(qū) -
A:已添加(Added) - 文件已經(jīng)被添加到暫存區(qū),但還沒有被提交 -
D:已刪除(Deleted) - 文件已經(jīng)被刪除,并且已經(jīng)被標記為刪除,但還沒有提交 -
R:已重命名(Renamed) - 文件已經(jīng)被重命名,這也算作是一種修改,需要被添加到暫存區(qū) -
C:已復制(Copied) - 文件已經(jīng)被復制,這也算作是一種修改,需要被添加到暫存區(qū) -
U:已更新但未融合(Updated but Unmerged) - 這表示一個文件已經(jīng)被更新了,但在合并時發(fā)生了沖突,需要手動解決沖突后再標記為已解決
Git基礎命令
.git 文件夾,沒有被 git 管理
.git 文件夾,初始化成功則可讓 git 開始準備管理
# 初始化 git 倉庫, 產(chǎn)物: .git 文件夾 (所在文件夾"內(nèi)"被管理)
git init
git init命令用于初始化空的git版本庫
.git 文件夾
-
對于 Windows 系統(tǒng),在查看里面勾選隱藏的項目選項 -
對于 macOS 系統(tǒng),使用快捷鍵 Command + Shift + .切換隱藏文件顯示
工作區(qū)開發(fā)--->將修改后的文件添加到暫存區(qū)--->將暫存區(qū)的文件記錄到版本庫
# 將 index.html 添加到暫存區(qū)
git add index.html
# 將css目錄下一切添加到暫存區(qū)
git add css
# .的意思是當前目錄下所有變化都暫存
git add .
git commit -m '提交的內(nèi)容說明'
git log
--oneline:在一行顯示簡略信息
git log --oneline
git status
git add .
git commit -m '新建登錄頁面_和樣式'
git reset --hard 版本號
git log --oneline
git reset --hard 477321b
git reflog命令,可以查看 git 所有的操作記錄,包括你的reset記錄
git reflog
-
git bash(終端)清屏:clear -
git bash(終端)另起一頁:Ctrl + L
.gitignore的忽略文件并寫入忽略規(guī)則(此處的文件名就是 .gitignore ,不是后綴)
# .gitignore內(nèi)容:
password.txt
其余用法:
# 忽略文件夾
css
# 忽略文件夾下的某個文件
css/index.js
# 忽略文件夾下某類文件
css/*.js
password.txt,查看 git 追蹤到了哪些變化
git status
.gitignore ,符合規(guī)則的都被忽略掉了
.gitignore文件在項目中可以根據(jù)腳手架自動生成,無需自己編寫,當然如果你非要寫,以下是Vue官方自動生成的.gitignore文件代碼,可供復制使用
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
lerna-debug.log*
node_modules
dist
dist-ssr
*.local
# Editor directories and files
.vscode/*
!.vscode/extensions.json
.idea
.DS_Store
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?
Git分支
git reset --hard a3bcab2,HEAD指針會移動,而且HEAD移動后,會影響工作區(qū)里的代碼
-
創(chuàng)建分支命令如下
# 創(chuàng)建分支
git branch 分支名
-
查看當前版本庫所有分支命令如下
# 查看當前版本庫所有分支,綠色帶*代表現(xiàn)在所處的分支
git branch
-
手動切換到分支上
# 切換分支命令
git checkout 分支名
reg.html文件,并隨便寫點內(nèi)容。隨后暫存并提交一次,這次提交的記錄會出現(xiàn)在這里,如圖
# 切換分支
git checkout master
# 把目標分支名下的所有記錄, 合并到當前分支下
git merge 目標分支名
git merge reg,執(zhí)行后效果如圖:
git branch -d 分支名
error: The branch 'branch_name' is not fully merged. If you are sure you want to delete it, run 'git branch -D branch_name'.
git branch -D <branch_name>命令來強制刪除該分支。但請注意,這樣會丟失掉分支上的未合并修改
-
在 master 分支下,修改 login.html的某行代碼,并完成一次暫存提交
-
切換到 reg 分支下,也修改 login.html的對應行代碼,并完成一次暫存提交
-
再切換回到 master 分支下,用合并命令,把 reg 分支下代碼和變化合并過來,不出意外就會出現(xiàn)沖突了
此時我們要進行抉擇: 采用當前更改、采用傳入更改、全部保留
此時結(jié)束沖突狀態(tài),變回正常狀態(tài)
Git分支流程圖詳解(拓展)
git branch reg 就會在當前的提交記錄上創(chuàng)建一個新的指針,名稱為reg
git checkout reg切換的是HEAD指針指向 (切換分支)
git add .添加到暫存區(qū),git commit -m 產(chǎn)生了一次提交記錄
-
git checkout B,切換到目標分支 B -
git merge A,把 A 分支記錄合并到所在 B 分支下
git checkout master
git merge reg
index.html文件,并暫存提交,產(chǎn)生了記錄
index.html文件(同一個文件),暫存提交,產(chǎn)生了記錄
Git遠程倉庫
gitee.com 網(wǎng)站以后,添加主郵箱為自己本地 git 倉庫設置的郵箱,注意一定要相同,否則無法正確提交 如果忘記了本地設置的郵箱地址:
-
可以打開控制臺輸入 git config --list重新查看郵箱地址 -
當然也可以使用 git config --global user.email你的郵箱地址重新覆蓋原來的郵箱地址
.git結(jié)尾的地址
-
HTTPS協(xié)議: 需要輸入用戶名和密碼 https://gitee.com/(userName)/(repositoryName).gitssh -
SSH協(xié)議: 需要配置密鑰,可免密碼登錄 [email protected]:userName/repositoryName.git
-
作用: 實現(xiàn)本地倉庫和 gitee 平臺之間免登錄的加密數(shù)據(jù)傳輸 -
組成: id_rsa (私鑰文件,存放于客戶端的電腦中即可)、id_rsa.pub (公鑰文件,需要配置到 gitee 平臺中)
私鑰加密的信息,只能通過公鑰解密。公鑰加密的信息,只能通過私鑰解密。安全性高!
-
先在本機生成一個密鑰 (以后也可以重新生成、重新配置),打開一個終端,輸入以下命令:
ssh-keygen -t rsa -C "你注冊賬號的郵箱"
-
連續(xù)敲擊 3 次回車,即可在
C:\Users\用戶名文件夾.ssh目錄中生成id_rsa和id_rsa.pub兩個文件 -
使用 VSCode 打開
id_rsa.pub文件,復制里面的文本內(nèi)容 -
粘貼配置到 碼云 -> 設置 -> ssh 公鑰 中即可
-
如果為 mac ,可進入以下教程查看:mac獲取公鑰
# 給遠程倉庫設置一個別名
git remote add 倉庫別名 倉庫地址
git remote add origin [email protected]:(username)/repository.git
# 刪除 origin 這個別名
git remote remove origin
# 使用 -u 記錄 push 到遠端分支的默認值,將來直接 git push 即可
git push -u 倉庫別名 分支名
-
隨便新建一個項目文件夾,初始化 git,隨后在項目文件中隨便填充點內(nèi)容,這里我新增一個 .gitignore文件,隨后暫存提交到本地 git 庫
-
輸入以下命令:
# 注意:這里的existing_git_repo是你的項目根路徑
# 如果你是在項目文件夾開啟的終端,忽略此行
cd existing_git_repo
# 添加遠程倉庫關聯(lián),倉庫別名origin,可以隨意更改,后接ssh地址
# 此處的ssh是自動生成的,可以去gitee空倉庫的代碼頁直接復制即可
git remote add origin [email protected]:li-houyi/test-factory.git
# 第一次推送到遠程時需要指定具體的分支,因為遠程倉庫并沒有這個分支
# 使用 -u 記錄 push 到遠端分支的默認值,將來直接 git push 即可
git push -u origin "master"
-
出現(xiàn)此頁面即為成功:
注意:推送的本地倉庫一定要非空并且本地暫存提交過,不然會報錯!這點也很好理解,你傳個空的項目到一個空倉庫,這可不得給你報錯嗎
-
推送成功后重新進入 gitee 倉庫頁面查看是否正確推送
git clone 命令
git clone [options] <repository-url> [directory]
# directory(可選)克隆后的本地倉庫所處的目錄名稱(默認創(chuàng)建與遠程倉庫名字相同的目錄)
-
-b <branch>或--branch <branch>: 指定要克隆的遠程倉庫的特定分支,它不會影響克隆操作所獲取的分支數(shù)量,而只是指定了默認要檢出的分支(不指定則默認克隆遠程倉庫的主分支) -
--depth <depth>: 指定克隆的深度,即只克隆指定數(shù)量的提交歷史 -
--single-branch: 僅克隆指定分支以及該分支上的歷史記錄,不下載其他分支 -
--recurse-submodules: 初始化并克隆子模塊的內(nèi)容 -
-n 或 --no-checkout: 克隆后不立即檢出任何分支,保留 HEAD 指向原始倉庫的默認分支 -
-o <name>或--origin <name>: 自定義遠程倉庫的別名。 -
-u <remote> <branch>或--set-upstream-to=<remote>/<branch>: 設置追蹤關系,使得本地分支自動與指定的遠程分支關聯(lián)
git clone 默認拉取 master 分支),不過實際開發(fā)中,并非只有一個分支,于是我們還需執(zhí)行以下步驟:
-
在本地建分支,分支名與遠程分支名相同,查看遠程分支名使用 git branch -r
git checkout -b 對應遠程分支名
-
拉取遠程分支 (不要在 master 分支直接拉取對應分支的代碼,切換到新建的分支)
# 每次拉取都需要指定遠程倉庫名和分支名
git pull 遠程倉庫名 分支名
-
以上兩行命令可以合并寫做一行(創(chuàng)建并拉取遠程分支代碼)
git checkout -b 分支名 origin/分支名
-
拓展: 設置 git pull默認拉取的分支(設置本地分支與遠程分支相關聯(lián))
git branch --set-upstream-to=origin/遠程分支名 本地分支名
Git常用命令總覽
<>為必填項,[]為可選項
推薦閱讀:
ThreadLocal 不香了?ScopedValue才是王道?
程序員在線工具站:cxytools.com
推薦一個我自己寫的工具站:http://cxytools.com,專為程序員設計,包括時間日期、JSON處理、SQL格式化、隨機字符串生成、UUID生成、隨機數(shù)生成、文本Hash...等功能,提升開發(fā)效率。
?戳閱讀原文直達! 朕已閱 
