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