Git
什么是Git
- Git是一款免費(fèi)、開(kāi)源的分布式
版本控制軟件VCS - Version Control System - 最初目的是為更好地管理 Linux內(nèi)核 開(kāi)發(fā)而設(shè)計(jì)
Git的優(yōu)勢(shì)
- Git的速度快,性能好
- 有效、高速的處理從很小到非常大的項(xiàng)目版本管理
- 采用分布式存儲(chǔ)方式,不需要服務(wù)器就可以運(yùn)行
- 使得源代碼的發(fā)布和交流極其方便
兩種版本控制工具
- 集中式版本控制工具: SVN
- 分布式版本控制工具: Git
集中式和分布式的區(qū)別
- 1 集中式依賴(lài)于遠(yuǎn)程服務(wù)器,在沒(méi)有網(wǎng)絡(luò)的情況下無(wú)法提交
- 2 所有開(kāi)發(fā)者都共享一個(gè)遠(yuǎn)程服務(wù)器
- 3 分布式直接進(jìn)行本地存儲(chǔ),不依賴(lài)與遠(yuǎn)程服務(wù)器(可有可無(wú))
- 4 沒(méi)有網(wǎng)絡(luò)的情況下,也可以工作,有網(wǎng)了,將本地修改內(nèi)容全部提交到遠(yuǎn)程服務(wù)器
Git的基本使用
- 查看幫助:
git --help - 查看某一命令幫助:
git add -h
基礎(chǔ)配置
- 需要配置:user.name 和 user.email
- 作用:每次 Git 提交時(shí)都會(huì)引用這兩條信息,記錄是誰(shuí)提交了更新
- 配置用戶(hù)名:
git config --global user.name "用戶(hù)名" - 配置郵箱:
git config --global user.email "郵箱地址" - 查看配置信息:
git config --list - 使用
--global實(shí)現(xiàn)全局配置,任何位置使用git都有效
初始化倉(cāng)庫(kù)
命令:
git init一般是在項(xiàng)目的根目錄執(zhí)行這個(gè)命令-
作用:使用Git管理項(xiàng)目的初始化操作,會(huì)創(chuàng)建一個(gè)名為
.git的隱藏目錄該目錄非常重要,每次克隆鏡像倉(cāng)庫(kù)的時(shí)候,實(shí)際拷貝的就是這個(gè)目錄里面的數(shù)據(jù)。
跟蹤文件
- 作用:將文件由 工作區(qū) 添加到 暫存區(qū)(Index),暫存文件
- 命令:
git add文件路徑- 例如:
git add ./README.md
- 例如:
-
git add --all或者git add -A(簡(jiǎn)寫(xiě)) 添加所有文件 -
git add a.txt b.txt同時(shí)添加兩個(gè)文件 -
git add *.js添加當(dāng)前目錄下的所有js文件
提交更新
- 作用:將文件由 暫存區(qū) 添加到 倉(cāng)庫(kù)(HEAD)
git commit -m "提交說(shuō)明"
查看文件狀態(tài)
- 命令:
git status - 命令:
git stauts -s簡(jiǎn)化日志輸出格式
提交代碼
- 三個(gè)存儲(chǔ)分區(qū)的說(shuō)明:
1 工作區(qū):開(kāi)發(fā)者的工作目錄
2 暫存區(qū):臨時(shí)存放工作目錄中變更的文件
3 倉(cāng)庫(kù) :存儲(chǔ)提交之后的文件目錄
- 文件的三種狀態(tài): ``` 已修改(modified)=> 已暫存(staged)=> 已提交(committed)
已修改表示修改了某個(gè)文件,但還沒(méi)有提交保存 已暫存表示把已修改的文件放在下次提交時(shí)要保存的清單中 已提交表示該文件已經(jīng)被安全地保存在本地git倉(cāng)庫(kù)中了
Git工作流程
- 1 在工作目錄中修改某些文件。
- 2 對(duì)修改后的文件進(jìn)行快照,然后保存到暫存區(qū)域。
- 3 提交更新,將保存在暫存區(qū)域的文件快照永久轉(zhuǎn)儲(chǔ)到.git目錄中。
查看提交日志
- 命令:
git log查看詳細(xì)的提交信息 - 命令:
git log --oneline簡(jiǎn)潔的日志信息 - 命令:
git reflog查看所有提交變更操作
版本回退
- 作用:恢復(fù)到已經(jīng)提交的某一個(gè)版本中
- 命令:
git reset --hard [版本號(hào)]- 作用:回退到指定的版本號(hào)
- 其他方式:
git reset --hard head~1- ~1 表示回到上一次提交
- ~2 表示上上一次提交
- ~0 表示當(dāng)前提交
忽略文件
-
作用:忽略一些不需要被git管理的文件
1 在與 .git 隱藏目錄同級(jí)的目錄中創(chuàng)建
.gitignore文件2 打開(kāi) .gitignore 文件,加入忽略文件,例如:/test.html
3 路徑是相對(duì)于當(dāng)前 .gitignore文件 的路徑
1 使用
#表示注釋?zhuān)纾?code># 這是注釋內(nèi)容2 使用
*表示通配符,匹配所有文件,例如:/css/*.css
.DS_Store
node_modules/
dist/
npm-debug.log
yarn-error.log
# Editor directories and files
.idea
*.suo
*.ntvs*
*.njsproj
*.sln
分支
- 查看分支:
git branch,當(dāng)前分支會(huì)標(biāo)有一個(gè)* - 創(chuàng)建分支:
git branch [分支名稱(chēng)]- 分支中的代碼,與創(chuàng)建那一刻主分支中的內(nèi)容完全相同
- 切換分支:
git checkout [分支名稱(chēng)] - (簡(jiǎn)寫(xiě))創(chuàng)建并切換分支:
git checkout -b [分支名稱(chēng)] - 合并分支:
git merge [分支名稱(chēng)],即:將其他分支合并到當(dāng)前分支 - 刪除分支:
git branch -d [分支名稱(chēng)]
合并分支沖突
- 注意:合并分支時(shí)出現(xiàn)沖突只能手動(dòng)處理文件,然后,再次提交
分支的說(shuō)明
- 1 公司開(kāi)發(fā)的項(xiàng)目都是由多個(gè)分支組成:主分支 + dev分支
- 2 項(xiàng)目經(jīng)理新建項(xiàng)目倉(cāng)庫(kù),所有的程序員都從這個(gè)倉(cāng)庫(kù)中獲取代碼,完成開(kāi)發(fā)任務(wù)
- 3 項(xiàng)目經(jīng)理:搭建設(shè)計(jì)倉(cāng)庫(kù),創(chuàng)建master分支,以及dev分支(以及 debug分支等)
- 4 所有的程序員在 dev分支 上進(jìn)行開(kāi)發(fā),并且還有自己維護(hù)的分支
- 5 程序員在分支上完成開(kāi)發(fā)任務(wù)后,會(huì)提交合并請(qǐng)求
- 6 項(xiàng)目經(jīng)理安排測(cè)試,如果沒(méi)有問(wèn)題了,最后才會(huì)與 master 分支合并
獲取遠(yuǎn)程倉(cāng)庫(kù)內(nèi)容
- 命令:
git pull [倉(cāng)庫(kù)地址] [分支名稱(chēng)]獲取遠(yuǎn)程倉(cāng)庫(kù)最新內(nèi)容 - 命令:
git clone [倉(cāng)庫(kù)地址] [自定義本地倉(cāng)庫(kù)名]將整個(gè)倉(cāng)庫(kù)克隆到本地- 實(shí)例:
git clone git://github.com/jquery/jquery.git myJQ
- 實(shí)例:
將代碼提交到遠(yuǎn)程倉(cāng)庫(kù)(HTTPS)
- 1 在本地創(chuàng)建倉(cāng)庫(kù)
git init
- 2 新建 README.md 文件,并輸入任意內(nèi)容
- 3 將 README.md 提交到本地
git addgit commit
- 4 在github中新建倉(cāng)庫(kù),并拿到倉(cāng)庫(kù)地址
- 5 使用命令
git push [倉(cāng)庫(kù)地址] master提交內(nèi)容到github的默認(rèn)分支 - 6 刷新github倉(cāng)庫(kù)頁(yè)面,在線修改 README.md 文件,并提交
- 7 使用命令
git pull [倉(cāng)庫(kù)地址] master獲取倉(cāng)庫(kù)中的最新內(nèi)容