前幾天座云,剛剛看到一個(gè)女生朋友的動(dòng)態(tài),說代碼沒了付材,還好男朋友幫忙找回來了朦拖,可能她還沒了解過比男朋友還靠譜的git
吧。
git
是常用的代碼管理工具厌衔,使用git之后璧帝,我們可以看到詳細(xì)的代碼修改記錄,代碼review
時(shí)也能能夠很好的甩鍋了【手動(dòng)捂臉】富寿,并且也可以實(shí)現(xiàn)代碼的備份睬隶。接下來,了解下git
的基本使用吧页徐。
注: 以下相關(guān)命令都是在項(xiàng)目的根目錄下執(zhí)行的苏潜。
本地倉庫
創(chuàng)建版本庫
先進(jìn)入到項(xiàng)目的根目錄,然后執(zhí)行以下命令变勇,創(chuàng)建項(xiàng)目的版本庫恤左。
git init
設(shè)置忽略的文件
項(xiàng)目中有些文件是不需要提交到遠(yuǎn)程倉庫的,比如日志文件搀绣、臨時(shí)文件飞袋、包含敏感信息的文件等。對于Node程序來說链患,node_modules/*
是所有依賴包所在目錄巧鸭,里面包含文件過多,并且程序部署時(shí)會(huì)再次安裝麻捻,所以無需提交纲仍。對于package-lock.json
览闰,因?yàn)槲覍⒃撐募蟼鞯?code>github之后,或有潛在安全漏洞
的提示巷折,所以暫時(shí)也忽略了該文件压鉴。對于鎖版本,有一個(gè)知乎的回答和另一個(gè)知乎的回答锻拘,可做參考油吭。
項(xiàng)目中.gitignore
文件的配置暫時(shí)如下:
# Logs
logs
node_modules/
app/public/apidoc/
package-lock.json
將文件加入版本庫
因?yàn)橐呀?jīng)設(shè)置了項(xiàng)目要忽略的文件,所以我通常都是將項(xiàng)目中所有的文件加入到版本庫署拟,當(dāng)然婉宰,也可以按需添加。將所有文件加入到版本庫的命令如下:
git add .
將文件提交到版本庫
上一步將需要的文件已經(jīng)加入到版本庫了推穷,現(xiàn)在需要將上一步的文件提交到版本庫心包,執(zhí)行以下命令:
git commit -m '你的提交說明信息'
當(dāng)然,commit規(guī)范還是要遵循的馒铃,不清楚的蟹腾,可以看我的這篇文章。
遠(yuǎn)程倉庫
添加遠(yuǎn)程倉庫
以上步驟区宇,只是在本地代碼倉庫的操作流程娃殖,我們在工作過程中肯定是會(huì)使用到遠(yuǎn)程倉庫的,遠(yuǎn)程倉庫既可以作為本地倉庫的備份议谷,又可以進(jìn)行團(tuán)隊(duì)協(xié)作的開發(fā)工作炉爆,所以,添加遠(yuǎn)程倉庫是好的選擇卧晓,執(zhí)行以下命令即可:
git remote add origin 你的遠(yuǎn)程倉庫地址
以github
為例芬首,遠(yuǎn)程倉庫地址如圖所示:
注:千萬是你的遠(yuǎn)程倉庫地址;千萬是你的遠(yuǎn)程倉庫地址逼裆;千萬是你的遠(yuǎn)程倉庫地址郁稍;
推送到遠(yuǎn)程倉庫
將本地倉庫提交的內(nèi)容推送到遠(yuǎn)程倉庫,這樣波附,就可能保證本地和遠(yuǎn)程的一致了艺晴,(當(dāng)前分支為master分支)執(zhí)行以下命令:
git push origin master
分支管理
開發(fā)和工作中,我們需要一個(gè)分支保持穩(wěn)定的功能一般這個(gè)分支為master
掸屡,當(dāng)然封寞,也可能存在不同版本的穩(wěn)定分支,視情況而定仅财。項(xiàng)目新的特性和bug修復(fù)狈究,不會(huì)在穩(wěn)定分支上進(jìn)行修改和提交,所以我們需要建立新的開發(fā)分支盏求,根據(jù)類型抖锥,我一般根據(jù)修改的類型建立不同類型的分支亿眠,比如新增需求的分支為feature/xxxx
,bug
修復(fù)的分支為bug/xxx
磅废,但是項(xiàng)目只有我自己開發(fā)纳像,所以就沒有那么嚴(yán)格的區(qū)分了,就只是有一個(gè)開發(fā)分支morehao_dev
拯勉。
建立分支
創(chuàng)建新的開發(fā)分支并切換到新的分支(當(dāng)前代碼分支為穩(wěn)定版本的master
分支)竟趾,命令如下:
git branch morehao_dev
git checkout morehao_dev
或者:
git checkout -b morehao_dev
推送分支
將新建的開發(fā)分支推送到遠(yuǎn)程倉庫,命令如下:
git push origin morehao_dev:morehao_dev
在開發(fā)分支上開發(fā)完相應(yīng)的需求或者修改完bug之后宫峦,需要提交并推送這些代碼岔帽,和在主分支上的操作一致,流程如下:
git add .
git commit -m '提交說明信息'
git push origin morehao_dev
分支合并
開發(fā)分支的代碼提交之后,如果相應(yīng)修改經(jīng)測試無誤导绷,就需要將這些修改同步到穩(wěn)定分支犀勒,本項(xiàng)目的穩(wěn)定分支為master
分支,這時(shí)就涉及到分支合并了,分支合并的命令為git merge
妥曲,我們當(dāng)前的代碼分支為morehao_dev
贾费,操作流程如下:
git checkout master
git pull origin master
git merge morehao_dev
git push origin master
pre-commit配置
現(xiàn)在,項(xiàng)目涉及到代碼提交了逾一,前面提到過的代碼規(guī)范就會(huì)在現(xiàn)在大發(fā)神威了铸本。
首先肮雨,安裝相應(yīng)庫包遵堵,命令如下:
npm install --save-dev pre-commit
npm install -g standard
然后,在package.json
中相應(yīng)位置添加如下配置:
"scripts": {
"standard": "standard"
},
"pre-commit": [
"standard"
],
配置完成之后怨规,進(jìn)行git commit
操作時(shí)陌宿,如果代碼不符合規(guī)范,是不允許進(jìn)行git commit
操作的波丰。
更新日志配置
每一次的commit就是一次代碼的更新壳坪,很好的記錄這些更新,能夠知道每次提交做了什么樣的修改或者新增了哪些特性掰烟,熟知各個(gè)版本的變化爽蝴。
首先安裝相應(yīng)的包,命令如下:
npm install -g conventional-changelog
然后纫骑,在package.json
中相應(yīng)位置添加如下配置:
"scripts": {
"changelog": "conventional-changelog -p angular -i CHANGELOG.md -s -r 0"
}
最后蝎亚,生成更新日志,執(zhí)行以下命令:
npm run changelog
執(zhí)行完生成更新日志的命令之后先馆,在項(xiàng)目的根目錄下回生成一個(gè)名為CHANGELOG.md
文件发框,記錄了更新的日志。
git常用命令
上面是比較基礎(chǔ)的git
操作和一些相關(guān)配置煤墙,以下是我學(xué)習(xí)和工作中常用的git
命令梅惯,不是所有的命令宪拥,但是完場日常工作,應(yīng)該是足夠了铣减。
創(chuàng)建秘鑰
進(jìn)入.ssh目錄她君,如果沒有改目錄,創(chuàng)建該目錄
cd .ssh
或
mkdir .ssh
配置公鑰
ssh-keygen -t rsa -C ''your email''
復(fù)制公鑰
cat id_rsa.pub
將公鑰粘貼到代碼托管工具的相應(yīng)位置
初始化本地倉庫
創(chuàng)建一個(gè)express項(xiàng)目
express projectName
初始化本地倉庫
cd projectName
git init
刪除本地倉庫
rm -rf .git
配置遠(yuǎn)程倉庫
添加遠(yuǎn)程倉庫
git remote add origin url
刪除遠(yuǎn)程倉庫
git remote remove origin
抓取遠(yuǎn)端倉庫最新項(xiàng)目
git pull origin master
修改后push到遠(yuǎn)端倉庫
git add .
<!--推薦按照commit日志基本規(guī)范編寫commit信息-->
git commit
git push origin master
本地分支與遠(yuǎn)程分支
列出所有本地分支
git branch
列出所有遠(yuǎn)程分支
git branch -r
列出所有本地分支和遠(yuǎn)程分支
git branch -a
建立本地分支
git branch dev
建立并切換分支
git checkout -b dev
推送本地分支到遠(yuǎn)程分支
git push origin dev:dev
刪除本地分支
git branch -d dev
刪除遠(yuǎn)程分支
git push origin --delete dev
查看本地分支與遠(yuǎn)程分支的映射關(guān)系
git branch -vv
建立本地分支與遠(yuǎn)程分支的映射關(guān)系
git branch --set-upstream-to origin/dev
撤銷本地分支與遠(yuǎn)程分支的映射關(guān)系
git branch --unset-upstream
下載遠(yuǎn)程分支
git clone url
指定下載遠(yuǎn)程分支
git clone -b branchName url
暫存修改
查看修改狀態(tài)
git status
保存當(dāng)前修改進(jìn)度
git stash
查看保存的修改進(jìn)度的列表
git stash list
恢復(fù)保存的修改進(jìn)度并刪除保存的修改進(jìn)度(默認(rèn)最新)
git stash pop
恢復(fù)保存的修改進(jìn)度但不刪除保存的修改進(jìn)度(默認(rèn)最新)
git stash apply
恢復(fù)指定的保存并刪除該保存
git stash pop stash@{2}
暫存刪除
git stash drop
版本回退
查看最近到最遠(yuǎn)的提交日志
git log
查看最近到最遠(yuǎn)的提交日志的簡要信息
git log --pretty=oneline
<!--在git log顯示的日志信息中葫哗,HEAD表示當(dāng)前版本犁河,也就是最新的版本,上個(gè)版本是HEAD^魄梯,上上個(gè)版本是HEAD^^桨螺,依次類推可以知道往上的100個(gè)版本為HEAD~100。-->
版本回退
git reset --hard HEAD^
或
<!--ID酿秸,不必寫全灭翔,git會(huì)自動(dòng)尋找相應(yīng)的版本號(hào)-->
git reset --hard aqweq #最后參數(shù)為commitId
git操作日志
git reflog
打標(biāo)簽
創(chuàng)建tag(標(biāo)簽)
git tag <tagName>
指定標(biāo)簽名(-a)和標(biāo)簽說明(-m)
git tag -a v1.4 -m 'my version 1.4'
查看所有標(biāo)簽
git tag
將tag推送到遠(yuǎn)程倉庫
git push origin <tagName>
將所有新增的本地標(biāo)簽推送到遠(yuǎn)程倉庫
git push origin --tags
刪除本地標(biāo)簽
git tag -d <tagName>
刪除遠(yuǎn)程倉庫的標(biāo)簽
git push origin :refs/tags/<tagName>
小結(jié)
本文以本項(xiàng)目為例,完成了基本的git
操作流程辣苏,并且羅列出了我常用的git
命令肝箱,我對git
的了解也不夠深入,也正在了解git工作流程
稀蟋,這個(gè)詞應(yīng)該會(huì)經(jīng)常出現(xiàn)在招聘信息中煌张,如果有興趣,可以了解下退客,幫助絕對不止一點(diǎn)點(diǎn)骏融。
下面附上項(xiàng)目的github地址:
我的個(gè)人博客: