GIT
GIT簡(jiǎn)介
什么是git: git是一個(gè)開(kāi)源到分布式版本控制系統(tǒng), 用于高效的管理各種大小項(xiàng)目和文件
代碼管理工具的用途
- 防止代碼丟失, 做備份
- 項(xiàng)目的版本管理和控制, 可以通過(guò)設(shè)置節(jié)點(diǎn)進(jìn)行跳轉(zhuǎn)
- 建立各自的開(kāi)發(fā)環(huán)境分支, 互不影響, 方便合并
- 在多終端開(kāi)發(fā)時(shí), 方便代碼的相互傳輸
- git的特點(diǎn)
- git是開(kāi)源的, 多在linux下使用, 可以管理各種文件
- git是分布式的項(xiàng)目管理工具(svn是集中式的)
- git的數(shù)據(jù)管理更多樣化, 分享速度快, 數(shù)據(jù)安全
- git擁有更好的分支支持, 方便多人協(xié)調(diào)
GIT使用
基本概念
- 工作區(qū): 項(xiàng)目所在操作目錄, 實(shí)際操作項(xiàng)目的區(qū)域
- 暫存區(qū): 用于記錄工作區(qū)的工作內(nèi)容
- 倉(cāng)庫(kù)區(qū): 用于備份工作區(qū)的的內(nèi)容
- 遠(yuǎn)程倉(cāng)庫(kù): 遠(yuǎn)程主機(jī)上的git倉(cāng)庫(kù)
注意: 在本地倉(cāng)庫(kù)中, git總是希望工作區(qū)的內(nèi)容和倉(cāng)庫(kù)區(qū)保持一致, 而且只有倉(cāng)庫(kù)區(qū)的內(nèi)容才能和其他遠(yuǎn)程倉(cāng)庫(kù)交互
初始設(shè)置
配置命令: git config
配置所有用戶: git config --system [選項(xiàng)]
- 配置文件位置: /etc/gitconfig
配置當(dāng)前用戶: git config --global [選項(xiàng)]
- 配置文件位置: ~/.gitconfig
配置當(dāng)前項(xiàng)目: git config [選項(xiàng)]
- 配置文件位置: project/.git/config
# 配置用戶名
sudo git config --system user.name xxxx
# 配置用戶郵箱
git config --global user.email xxxx@xxxx.com
基本命令
- 初始化倉(cāng)庫(kù)
git init
意義: 將某個(gè)項(xiàng)目目錄變?yōu)間it操作目錄, 生成git本地倉(cāng)庫(kù), 該項(xiàng)目可以使用git管理
- 查看倉(cāng)庫(kù)本地狀態(tài)
git status
說(shuō)明: 初始化倉(cāng)庫(kù)后默認(rèn)工作在master分支, 當(dāng)工作區(qū)與倉(cāng)庫(kù)區(qū)不一致的時(shí)候會(huì)有提示
- 將工作區(qū)記錄到暫存區(qū)
git add [files]
說(shuō)明: 將修改過(guò)的文件(與倉(cāng)庫(kù)區(qū)不同)進(jìn)行記錄, 放入暫存區(qū)
- 撤銷暫存記錄
git rm --cached [files]
說(shuō)明: 將暫存區(qū)的文件刪除以取消暫存
擴(kuò)展延申
在git項(xiàng)目中可以通過(guò)項(xiàng)目的某個(gè)文件夾下定義.gitignore文件的方式, 規(guī)定相應(yīng)的忽略規(guī)則, 用來(lái)管理當(dāng)前文件夾下的文件的git提交行為, .gitignore文件是可以提交到共有倉(cāng)庫(kù)中, 這就為該項(xiàng)目下的所有開(kāi)發(fā)者都共享一套定義好的忽略規(guī)則, 在.gitignore中, 遵循響應(yīng)的法則, 在每一行指定一個(gè)忽略規(guī)則
.gitignore忽略規(guī)則
- file: 表示需要忽略的文件
- *.a: 表示所有以.a結(jié)尾的文件
- !lib.a: 表示但lib.a除外
- build/: 表示忽略build/目錄下的所有文件, 過(guò)濾整個(gè)文件夾
- 將文件同步到本地倉(cāng)庫(kù)
git commit [file] -m [message]
說(shuō)明: message表示添加一些同步信息, 表達(dá)同步內(nèi)容
- 查看commit日志記錄
git log
git log --pretty=oneline
- 比較工作區(qū)文件和倉(cāng)庫(kù)文件差異
git diff [file]
- 將暫存區(qū)文件或者某個(gè)commit節(jié)點(diǎn)文件恢復(fù)到工作區(qū)
git checkout [commit] --[file]
說(shuō)明: 為了防止誤操作, checkout還有切換分支的作用
- 移動(dòng)或刪除文件
git mv [file] [path]
git rm [files]
注意: 這兩個(gè)操作會(huì)修改工作區(qū)內(nèi)容, 同時(shí)將操作記錄提交到暫存區(qū)
版本控制
- 退回上一個(gè)commit節(jié)點(diǎn)
git reset --hard HEAD^
說(shuō)明: 一個(gè)^表示退回一個(gè)版本, 以此類推, 當(dāng)版本回退之后工作區(qū)會(huì)自動(dòng)和當(dāng)前commit保持一致
- 退回到指定的commit節(jié)點(diǎn)
git reset --hard [commit_id]
- 查看所有操作記錄
git reflog
注意: 最上面的為最新記錄, 可以利用commit_id去往任何操作位置
- 創(chuàng)建標(biāo)簽
標(biāo)簽: 在項(xiàng)目中的重要commit位置添加快照, 保存當(dāng)時(shí)的工作狀態(tài), 一般用于版本的迭代
git tag [tag_name] [commit_id] -m [message]
說(shuō)明: commit_id可以不寫則默認(rèn)標(biāo)簽表示最新的commit_id位置, message也可以不寫, 但是最好添加
- 查看標(biāo)簽
git tag 查看標(biāo)簽列表
git show [tag_name] 查看標(biāo)簽詳細(xì)信息
- 去往某個(gè)標(biāo)簽節(jié)點(diǎn)
git reset --hard [tag_name]
- 刪除標(biāo)簽
git tag -d [tag_name]
保存工作區(qū)
- 保存工作區(qū)內(nèi)容
git stash save [message]
說(shuō)明: 將工作區(qū)未提交的的修改封存, 讓工作區(qū)回到修改前的狀態(tài)
- 查看工作區(qū)列表
git stash list
說(shuō)明: 最新保存的工作區(qū)在最上面
- 應(yīng)用某個(gè)工作區(qū)
git stash apply [stash@{n}]
說(shuō)明: 應(yīng)用某個(gè)暫存方案, 最新保存的工作區(qū)在最上面
- 刪除工作區(qū)
git stash drop [stash@{n}] 刪除某一個(gè)工作區(qū)
git stash clear 刪除所有保存的工作區(qū)
分支管理
定義: 分支即每個(gè)人在原有代碼(分支)的基礎(chǔ)上建立自己的工作環(huán)境, 單獨(dú)開(kāi)發(fā), 互不干擾, 完成工作開(kāi)發(fā)后在進(jìn)行統(tǒng)一分支合并
- 查看分支情況
git branch
說(shuō)明: 前面帶*的分支表示當(dāng)前的工作分支
- 創(chuàng)建分支
git branch [branch_name]
說(shuō)明: 創(chuàng)建新分支
- 合并分支
git merge [branch_name]
將其他分支的內(nèi)容合并到當(dāng)前分支, 沖突問(wèn)題是合并分支過(guò)程中最為棘手的問(wèn)題當(dāng)分支合并時(shí), 原分支和發(fā)生了變化的分支就會(huì)產(chǎn)生沖突, 當(dāng)合并分支時(shí)添加新的模塊, 這種沖突可以自動(dòng)解決, 只需自己決定commit操作即可
當(dāng)分支合并時(shí)兩個(gè)分支修改了同一個(gè)文件, 則需要手動(dòng)解決沖突
- 刪除分支
git branch -d [branch] 刪除分支
git branch -D [branch] 刪除沒(méi)有被合并的分支
遠(yuǎn)程倉(cāng)庫(kù)
遠(yuǎn)程倉(cāng)庫(kù)上的git倉(cāng)庫(kù), 實(shí)際上git是分布式結(jié)構(gòu), 每臺(tái)主機(jī)的git倉(cāng)庫(kù)結(jié)構(gòu)類似, 只是把別人主機(jī)上的git倉(cāng)庫(kù)稱為遠(yuǎn)程倉(cāng)庫(kù)
GitHub簡(jiǎn)介
github是一個(gè)開(kāi)源的項(xiàng)目社區(qū)網(wǎng)站, 擁有全球最多的開(kāi)源項(xiàng)目, 開(kāi)發(fā)者可以注冊(cè)網(wǎng)站在github上建立自己的倉(cāng)庫(kù)
獲取項(xiàng)目
- 在本地使用git clone方法獲取遠(yuǎn)程倉(cāng)庫(kù)
git clone https://github.com/xxxx
注意: 獲取到本地的項(xiàng)目會(huì)自動(dòng)和github遠(yuǎn)程倉(cāng)庫(kù)建立連接, 且獲取的項(xiàng)目本身也是git項(xiàng)目
創(chuàng)建刪除git倉(cāng)庫(kù)
遠(yuǎn)程倉(cāng)庫(kù)操作命令
- 連接遠(yuǎn)程倉(cāng)庫(kù)
git remote add origin https://github.com/xxxx
說(shuō)明: 連接遠(yuǎn)程倉(cāng)庫(kù), 并命名為origin
- 刪除遠(yuǎn)程倉(cāng)庫(kù)
git remote rm origin
說(shuō)明: 刪除名為origin的遠(yuǎn)程倉(cāng)庫(kù)
- 向遠(yuǎn)程倉(cāng)庫(kù)推送
git push -u origin master
說(shuō)明: 將本地master分支推送至遠(yuǎn)程origin倉(cāng)庫(kù), -u表示第一次使用origin和本地建立連接
- 上傳標(biāo)簽
git push origin [tag] 推送本地標(biāo)簽到遠(yuǎn)程
git push origin --tag 推送本地所有標(biāo)簽到遠(yuǎn)程
- 推送舊的版本
git push --force origin 用于本地版本比遠(yuǎn)程版本舊時(shí)強(qiáng)行推送本地版本
- 刪除遠(yuǎn)程分支和標(biāo)簽
git branch -a 查看所有分支
git push origin [:branch] 刪除遠(yuǎn)程分支
git push origin --delete tag [tag_name] 刪除遠(yuǎn)程倉(cāng)庫(kù)標(biāo)簽
- 獲取遠(yuǎn)程代碼
git pull 獲取遠(yuǎn)程分支代碼
git fetch origin master:tmp 將遠(yuǎn)程分支master拉取到本地, 作為tmp分支
區(qū)別: pull將遠(yuǎn)程內(nèi)容直接拉取至本地, 并和對(duì)應(yīng)分支內(nèi)容進(jìn)行合并, fetch將遠(yuǎn)程分支內(nèi)容拉取到本地, 但是不會(huì)和本地對(duì)應(yīng)分支合并, 自己判斷后在使用merge合并