Git初識
概念:一個免費開源,分布式的代碼版本控制系統,幫助開發團隊維護代碼
作用:記錄代碼內容,切換代碼版本,多人開發時高效合并代碼內容
檢驗成功
- 打開bash終端(git專用)
- 命令:git -V(查看版本號)
?Git配置用戶信息
配置:用戶名和郵箱,應用在每次提交代碼版本時表明自己身份
命令:
?掌握Git倉庫
Git倉庫(respository):記錄文件狀態內容的地方,存儲著修改的歷史記錄(.git文件夾)
創建:
- 把本地文件夾轉換成Git倉庫:命令git init
- 從其他服務器上克隆Git倉庫
需求:創建一個空白的Git倉庫
Git的三個區域
Git使用時:
工作區:實際開發時操作的文件夾
暫存區:保存之前的準備區域(暫存改動過的文件)
版本庫:提交并保存暫存區中的內容,產生一個版本快照
命令 | 作用 |
---|---|
git add 文件名 | 暫存指定文件 |
git add . | 暫存所有改動過的文件按 |
git commit -m "注釋說明" | 提交并保存,產生版本快照 |
git ls-files獲取放在暫存區中的文件
?Git文件狀態
Git文件2種狀態:
- 未跟蹤:新文件,從未被Git管理過
- 已跟蹤:Git已經知道和管理的文件
文件狀態 | 概念 | 場景 |
---|---|---|
未跟蹤(U) | 從未被Git管理過 | 新文件 |
新添加(A) | 第一次被Git暫存 | 之前版本記錄無此文件 |
未修改('') | 三個區域統一 | 提交保存后 |
已修改(M) | 工作區內容變化 | 修改了內容產生 |
使用:修改文件,暫存,提交保存記錄,如此反復?
需求:新增css文件,并使用git status -s查看文件狀態,并最終提交?
第一列是暫存區狀態,第二列是工作區狀態
Git暫存區使用
暫存區:暫時存儲,可以臨時恢復代碼內容,與版本庫解耦
暫存區->覆蓋->工作區,命令:git restore 目標文件(注意:完全確認覆蓋時使用)
從暫存區移除文件,命令:git rm --cached 目標文件
查看暫存區內的文件:git ls-files
練習-登陸頁面
需求:新增JS代碼并暫存提交產生新的版本快照
步驟
- 新增JS文件和內容
- 臨時存放在暫存區
- 提交保存到版本庫?
Git回退版本
查看提交歷史:git? log --oneline
回退命令:
git reset --soft 版本號(其他文件未跟蹤)
git reset --hard 版本號
git reset --mixed 版本號 (與git reset等價)
注意1:只有記錄在版本庫的提交記錄才能恢復
注意2:回退后,繼續修改->暫存->提交操作即可(產生新的提交記錄過程)
查看完整日志:git reflog --oneline
?刪除文件
需求:刪除editor.js文件,并產生一次版本記錄
步驟:
- 手動刪除工作區文件
- 暫存變更/手動刪除暫存區文件造成變更
- 提交保存
總結:工作區只要改變,都可以暫存提交產生新記錄
忽略文件
概念:.gitignore文件可以讓git徹底忽略跟蹤指定文件
目的:讓git倉庫更小更快,避免重復無意義的文件管理
例如:
- 系統或軟件自動生成的文件
- 編譯產生的結果文件
- 運行時產生的日志文件,緩存文件,臨時文件等
- 涉密文件,密碼,秘鑰等文件
創建:
- 項目根目錄新建.gitignore文件
- 填入相應配置來忽略指定文件
注意:如果文件已經被暫存區跟蹤過,可以從暫存區移除即可
分支
概念:本質上是指向提交節點的可變指針,默認名字是master
注意:HEAD指針影響工作區/暫存區的代碼狀態
場景:開發新需求/修復BUG,保證主線代碼隨時可用,多人協同開發提高效率
例如:在現有代碼上創建新分支宛城內容列表業務,或者突然需要緊急修復BUG-單獨創建分支解決Bug
需求:創建內容列表content分支,并產生3次提交記錄
步驟:
- 創建分支命令:git branch 分支名
- 切換分支命令:git checkout 分支名
- 工作區準備代碼并暫存提交,重復3次
git branch查看當前有哪些分支
?練習-登錄bug修復
需求:新建login-bug分支,做兩次提交記錄(對手機號長度,驗證碼長度做判斷)
步驟:
- 切回到主分支:git checkout master
- 創建新分支:git branch login-bug
- 切換新分支:git checkout login-bug
- 修改代碼,暫存,提交產生版本記錄
?分支-合并和刪除
需求:把login-bug合并回到master分支并刪除logh-bug分支
步驟:
- 切回到要合入的分支上:git checkout master
- 合并其他分支過來:git merge login-bug
- 刪除合并后的分支指針:git branch -d login-bug
分支-合并與提交
?合并提交:發生于原分支產生了新的提交記錄后,再合并回去時發生,自動使用多個快照記錄合并后產生一次新的提交
步驟:
- 切回到要合入的分支上:git checkout master
- 合并其他分支過來:git merge content
- 刪除合并后的分支:git branch -d content
注意:提交記錄的順序按照產生的先后順序排列,而非合并的先后順序
分支-合并沖突
需求1:基于master新建publish分支,完成發布文章業務,然后修改內容頁面的html文件的title標簽,并提交一次?
需求2:切換到master,也在修改內容頁面的html文件的title標簽,并提交一次
沖突:把publish分支合并到master回來,產生合并沖突
概念:不同分支中,對同一個文件的同一部分進行修改,Git無法干凈的合并,產生合并沖突
解決:
- 打開VSCode找到沖突文件并手動解決
- 解決后需要提交一次記錄
Git常用命令
命令 | 作用 | 注意 |
---|---|---|
git -v | 查看git版本 | |
git init | 初始化git倉庫 | |
git add 文件標識 | 暫存某個文件 | 文件標識以終端為起始的相對路徑 |
git add . | 暫存所有文件 | |
git commit -m '說明注釋' | 提交產生版本記錄 | 每次提交,把暫存區內容快照一份 |
git status | 查看文件狀態-詳細信息 | |
git status -s | 查看文件狀態-簡略信息 | 第一列時暫存區狀態,第二列是工作區狀態 |
git ls-flies | 查看暫存區文件列表 | |
git restore | 從暫存區恢復到工作區 | 如果文件標識為.則恢復所有文件 |
git rm --cashed 文件標識 | 從暫存區移除文件 | 不讓git跟蹤文件變化 |
git log | 查看提交記錄-詳細信息 | |
git log --oneline | 查看提交記錄-簡略信息 | 版本號 分支指針 提交時說明注釋 |
命令 | 作用 | 注意 |
---|---|---|
git reflog --oneline | 查看完整歷史 - 簡略消息 | 包括提交,切換,回退等所有記錄 |
git reset 版本號 | 切換版本代碼到暫存區和工作區 | --soft模式保留暫存區和工作區原本內容 --hard 模式不保留暫存區和工作區原本內容 --mixed 模式不保留暫存區,工作區保留(默認) 先覆蓋到暫存區,再用暫存區對比覆蓋工作區 |
git branch 分支名 | 創建分支 | |
git branch | 查看本地分支 | |
git branch -d 分支名 | 刪除分支 | 請確保記錄已經合并到別的分支下,再刪除分支 |
git checkout 分支名 | 切換分支 | |
git checkout -b 分支名 | 創建并立刻切換分支 | |
git merge 分支名 | 把分支提交歷史記錄合并到當前所在分支 |
Git遠程倉庫
概念:托管在因特網或其他網絡中的你的項目的版本庫
?作用:保存版本庫的歷史記錄,多人協作
創建:公司自己服務器/第三方托管平臺(Gitee,GitLab,GitHub)
?需求:創建遠程版本庫
步驟:
- 注冊第三方托管平臺網站賬號
- 新建倉庫得到遠程倉庫Git地址
- 本地Git倉庫添加遠程倉庫原點地址 命令:git remote add 遠程倉庫別名 遠程倉庫地址
- 本地Git倉庫推送版本記錄到遠程倉庫 命令:git push -u 遠程倉庫別名 本地和遠程分支名
Git遠程倉庫-克隆
克隆:拷貝一個Git倉庫到本地,進行使用
命令:git clone 遠程倉庫地址
效果:在運行命令所在文件夾,生成work項目文件夾(包括版本庫,并映射到暫存區和工作區)?
?注意1:Git本地倉庫已經建立好和遠程倉庫的鏈接
注意2:倉庫公開隨意克隆,推送需要身為倉庫團隊成員
多人協同開發
命令 | 作用 | 注意 |
---|---|---|
git remote add 遠程倉庫別名 遠程倉庫地址 | 添加遠程倉庫地址 | 別名唯一,地址是.git結尾的網址 |
git remote -v? | 查看遠程倉庫地址 | |
git remote remove 遠程倉庫別名 | 刪除遠程倉庫地址 | |
git pull 遠程倉庫別名 分支名 | 拉取 | 完整寫法:git pull 遠程倉庫別名 遠程倉庫分支名:本地分支名等價于:git fetch 和git merge |
git push 遠程倉庫別名 分支名 | 推送 | 完整寫法:git push 遠程倉庫別名 本地分支名:遠程分支名 -u:建立通道后以后可以簡寫git push |
git clone 遠程倉庫地址 | 克隆 | 從0得到一個遠程的Git倉庫到本地使用 |
git pull --rebase 遠程倉庫別名 分支名
合并沒有關系的記錄
?