前幾天,剛剛看到一個女生朋友的動態(tài),說代碼沒了,還好男朋友幫忙找回來了,可能她還沒了解過比男朋友還靠譜的git吧。
git是常用的代碼管理工具,使用git之后,我們可以看到詳細的代碼修改記錄,代碼review時也能能夠很好的甩鍋了【手動捂臉】,并且也可以實現代碼的備份。接下來,了解下git的基本使用吧。
注: 以下相關命令都是在項目的根目錄下執(zhí)行的。
本地倉庫
創(chuàng)建版本庫
先進入到項目的根目錄,然后執(zhí)行以下命令,創(chuàng)建項目的版本庫。
git init
設置忽略的文件
項目中有些文件是不需要提交到遠程倉庫的,比如日志文件、臨時文件、包含敏感信息的文件等。對于Node程序來說,node_modules/*是所有依賴包所在目錄,里面包含文件過多,并且程序部署時會再次安裝,所以無需提交。對于package-lock.json,因為我將該文件上傳到github之后,或有潛在安全漏洞的提示,所以暫時也忽略了該文件。對于鎖版本,有一個知乎的回答和另一個知乎的回答,可做參考。
項目中.gitignore文件的配置暫時如下:
# Logs
logs
node_modules/
app/public/apidoc/
package-lock.json
將文件加入版本庫
因為已經設置了項目要忽略的文件,所以我通常都是將項目中所有的文件加入到版本庫,當然,也可以按需添加。將所有文件加入到版本庫的命令如下:
git add .
將文件提交到版本庫
上一步將需要的文件已經加入到版本庫了,現在需要將上一步的文件提交到版本庫,執(zhí)行以下命令:
git commit -m '你的提交說明信息'
當然,commit規(guī)范還是要遵循的,不清楚的,可以看我的這篇文章。
遠程倉庫
添加遠程倉庫
以上步驟,只是在本地代碼倉庫的操作流程,我們在工作過程中肯定是會使用到遠程倉庫的,遠程倉庫既可以作為本地倉庫的備份,又可以進行團隊協(xié)作的開發(fā)工作,所以,添加遠程倉庫是好的選擇,執(zhí)行以下命令即可:
git remote add origin 你的遠程倉庫地址
以github為例,遠程倉庫地址如圖所示:

注:千萬是你的遠程倉庫地址;千萬是你的遠程倉庫地址;千萬是你的遠程倉庫地址;
推送到遠程倉庫
將本地倉庫提交的內容推送到遠程倉庫,這樣,就可能保證本地和遠程的一致了,(當前分支為master分支)執(zhí)行以下命令:
git push origin master
分支管理
開發(fā)和工作中,我們需要一個分支保持穩(wěn)定的功能一般這個分支為master,當然,也可能存在不同版本的穩(wěn)定分支,視情況而定。項目新的特性和bug修復,不會在穩(wěn)定分支上進行修改和提交,所以我們需要建立新的開發(fā)分支,根據類型,我一般根據修改的類型建立不同類型的分支,比如新增需求的分支為feature/xxxx,bug修復的分支為bug/xxx,但是項目只有我自己開發(fā),所以就沒有那么嚴格的區(qū)分了,就只是有一個開發(fā)分支morehao_dev。
建立分支
創(chuàng)建新的開發(fā)分支并切換到新的分支(當前代碼分支為穩(wěn)定版本的master分支),命令如下:
git branch morehao_dev
git checkout morehao_dev
或者:
git checkout -b morehao_dev
推送分支
將新建的開發(fā)分支推送到遠程倉庫,命令如下:
git push origin morehao_dev:morehao_dev
在開發(fā)分支上開發(fā)完相應的需求或者修改完bug之后,需要提交并推送這些代碼,和在主分支上的操作一致,流程如下:
git add .
git commit -m '提交說明信息'
git push origin morehao_dev
分支合并
開發(fā)分支的代碼提交之后,如果相應修改經測試無誤,就需要將這些修改同步到穩(wěn)定分支,本項目的穩(wěn)定分支為master分支,這時就涉及到分支合并了,分支合并的命令為git merge,我們當前的代碼分支為morehao_dev,操作流程如下:
git checkout master
git pull origin master
git merge morehao_dev
git push origin master
pre-commit配置
現在,項目涉及到代碼提交了,前面提到過的代碼規(guī)范就會在現在大發(fā)神威了。
首先,安裝相應庫包,命令如下:
npm install --save-dev pre-commit
npm install -g standard
然后,在package.json中相應位置添加如下配置:
"scripts": {
"standard": "standard"
},
"pre-commit": [
"standard"
],
配置完成之后,進行git commit操作時,如果代碼不符合規(guī)范,是不允許進行git commit操作的。
更新日志配置
每一次的commit就是一次代碼的更新,很好的記錄這些更新,能夠知道每次提交做了什么樣的修改或者新增了哪些特性,熟知各個版本的變化。
首先安裝相應的包,命令如下:
npm install -g conventional-changelog
然后,在package.json中相應位置添加如下配置:
"scripts": {
"changelog": "conventional-changelog -p angular -i CHANGELOG.md -s -r 0"
}
最后,生成更新日志,執(zhí)行以下命令:
npm run changelog
執(zhí)行完生成更新日志的命令之后,在項目的根目錄下回生成一個名為CHANGELOG.md文件,記錄了更新的日志。
git常用命令
上面是比較基礎的git操作和一些相關配置,以下是我學習和工作中常用的git命令,不是所有的命令,但是完場日常工作,應該是足夠了。
創(chuàng)建秘鑰
進入.ssh目錄,如果沒有改目錄,創(chuàng)建該目錄
cd .ssh
或
mkdir .ssh
配置公鑰
ssh-keygen -t rsa -C ''your email''
復制公鑰
cat id_rsa.pub
將公鑰粘貼到代碼托管工具的相應位置
初始化本地倉庫
創(chuàng)建一個express項目
express projectName
初始化本地倉庫
cd projectName
git init
刪除本地倉庫
rm -rf .git
配置遠程倉庫
添加遠程倉庫
git remote add origin url
刪除遠程倉庫
git remote remove origin
抓取遠端倉庫最新項目
git pull origin master
修改后push到遠端倉庫
git add .
<!--推薦按照commit日志基本規(guī)范編寫commit信息-->
git commit
git push origin master
本地分支與遠程分支
列出所有本地分支
git branch
列出所有遠程分支
git branch -r
列出所有本地分支和遠程分支
git branch -a
建立本地分支
git branch dev
建立并切換分支
git checkout -b dev
推送本地分支到遠程分支
git push origin dev:dev
刪除本地分支
git branch -d dev
刪除遠程分支
git push origin --delete dev
查看本地分支與遠程分支的映射關系
git branch -vv
建立本地分支與遠程分支的映射關系
git branch --set-upstream-to origin/dev
撤銷本地分支與遠程分支的映射關系
git branch --unset-upstream
下載遠程分支
git clone url
指定下載遠程分支
git clone -b branchName url
暫存修改
查看修改狀態(tài)
git status
保存當前修改進度
git stash
查看保存的修改進度的列表
git stash list
恢復保存的修改進度并刪除保存的修改進度(默認最新)
git stash pop
恢復保存的修改進度但不刪除保存的修改進度(默認最新)
git stash apply
恢復指定的保存并刪除該保存
git stash pop stash@{2}
暫存刪除
git stash drop
版本回退
查看最近到最遠的提交日志
git log
查看最近到最遠的提交日志的簡要信息
git log --pretty=oneline
<!--在git log顯示的日志信息中,HEAD表示當前版本,也就是最新的版本,上個版本是HEAD^,上上個版本是HEAD^^,依次類推可以知道往上的100個版本為HEAD~100。-->
版本回退
git reset --hard HEAD^
或
<!--ID,不必寫全,git會自動尋找相應的版本號-->
git reset --hard aqweq #最后參數為commitId
git操作日志
git reflog
打標簽
創(chuàng)建tag(標簽)
git tag <tagName>
指定標簽名(-a)和標簽說明(-m)
git tag -a v1.4 -m 'my version 1.4'
查看所有標簽
git tag
將tag推送到遠程倉庫
git push origin <tagName>
將所有新增的本地標簽推送到遠程倉庫
git push origin --tags
刪除本地標簽
git tag -d <tagName>
刪除遠程倉庫的標簽
git push origin :refs/tags/<tagName>
小結
本文以本項目為例,完成了基本的git操作流程,并且羅列出了我常用的git命令,我對git的了解也不夠深入,也正在了解git工作流程,這個詞應該會經常出現在招聘信息中,如果有興趣,可以了解下,幫助絕對不止一點點。
下面附上項目的github地址:
我的個人博客: