前几天,刚刚看到一个女生朋友的动态,说代码没了,还好男朋友帮忙找回来了,可能她还没了解过比男朋友还靠谱的git
吧。
git
是常用的代码管理工具,使用git之后,我们可以看到详细的代码修改记录,代码review
时也能能够很好的甩锅了【手动捂脸】,并且也可以实现代码的备份。接下来,了解下git
的基本使用吧。
注: 以下相关命令都是在项目的根目录下执行的。
本地仓库
创建版本库
先进入到项目的根目录,然后执行以下命令,创建项目的版本库。
git init
设置忽略的文件
项目中有些文件是不需要提交到远程仓库的,比如日志文件、临时文件、包含敏感信息的文件等。对于Node程序来说,node_modules/*
是所有依赖包所在目录,里面包含文件过多,并且程序部署时会再次安装,所以无需提交。对于package-lock.json
,因为我将该文件上传到github
之后,或有潜在安全漏洞
的提示,所以暂时也忽略了该文件。对于锁版本,有一个知乎的回答和另一个知乎的回答,可做参考。
项目中.gitignore
文件的配置暂时如下:
# Logs
logs
node_modules/
app/public/apidoc/
package-lock.json
将文件加入版本库
因为已经设置了项目要忽略的文件,所以我通常都是将项目中所有的文件加入到版本库,当然,也可以按需添加。将所有文件加入到版本库的命令如下:
git add .
将文件提交到版本库
上一步将需要的文件已经加入到版本库了,现在需要将上一步的文件提交到版本库,执行以下命令:
git commit -m '你的提交说明信息'
当然,commit规范还是要遵循的,不清楚的,可以看我的这篇文章。
远程仓库
添加远程仓库
以上步骤,只是在本地代码仓库的操作流程,我们在工作过程中肯定是会使用到远程仓库的,远程仓库既可以作为本地仓库的备份,又可以进行团队协作的开发工作,所以,添加远程仓库是好的选择,执行以下命令即可:
git remote add origin 你的远程仓库地址
以github
为例,远程仓库地址如图所示:
注:千万是你的远程仓库地址;千万是你的远程仓库地址;千万是你的远程仓库地址;
推送到远程仓库
将本地仓库提交的内容推送到远程仓库,这样,就可能保证本地和远程的一致了,(当前分支为master分支)执行以下命令:
git push origin master
分支管理
开发和工作中,我们需要一个分支保持稳定的功能一般这个分支为master
,当然,也可能存在不同版本的稳定分支,视情况而定。项目新的特性和bug修复,不会在稳定分支上进行修改和提交,所以我们需要建立新的开发分支,根据类型,我一般根据修改的类型建立不同类型的分支,比如新增需求的分支为feature/xxxx
,bug
修复的分支为bug/xxx
,但是项目只有我自己开发,所以就没有那么严格的区分了,就只是有一个开发分支morehao_dev
。
建立分支
创建新的开发分支并切换到新的分支(当前代码分支为稳定版本的master
分支),命令如下:
git branch morehao_dev
git checkout morehao_dev
或者:
git checkout -b morehao_dev
推送分支
将新建的开发分支推送到远程仓库,命令如下:
git push origin morehao_dev:morehao_dev
在开发分支上开发完相应的需求或者修改完bug之后,需要提交并推送这些代码,和在主分支上的操作一致,流程如下:
git add .
git commit -m '提交说明信息'
git push origin morehao_dev
分支合并
开发分支的代码提交之后,如果相应修改经测试无误,就需要将这些修改同步到稳定分支,本项目的稳定分支为master
分支,这时就涉及到分支合并了,分支合并的命令为git merge
,我们当前的代码分支为morehao_dev
,操作流程如下:
git checkout master
git pull origin master
git merge morehao_dev
git push origin master
pre-commit配置
现在,项目涉及到代码提交了,前面提到过的代码规范就会在现在大发神威了。
首先,安装相应库包,命令如下:
npm install --save-dev pre-commit
npm install -g standard
然后,在package.json
中相应位置添加如下配置:
"scripts": {
"standard": "standard"
},
"pre-commit": [
"standard"
],
配置完成之后,进行git commit
操作时,如果代码不符合规范,是不允许进行git commit
操作的。
更新日志配置
每一次的commit就是一次代码的更新,很好的记录这些更新,能够知道每次提交做了什么样的修改或者新增了哪些特性,熟知各个版本的变化。
首先安装相应的包,命令如下:
npm install -g conventional-changelog
然后,在package.json
中相应位置添加如下配置:
"scripts": {
"changelog": "conventional-changelog -p angular -i CHANGELOG.md -s -r 0"
}
最后,生成更新日志,执行以下命令:
npm run changelog
执行完生成更新日志的命令之后,在项目的根目录下回生成一个名为CHANGELOG.md
文件,记录了更新的日志。
git常用命令
上面是比较基础的git
操作和一些相关配置,以下是我学习和工作中常用的git
命令,不是所有的命令,但是完场日常工作,应该是足够了。
创建秘钥
进入.ssh目录,如果没有改目录,创建该目录
cd .ssh
或
mkdir .ssh
配置公钥
ssh-keygen -t rsa -C ''your email''
复制公钥
cat id_rsa.pub
将公钥粘贴到代码托管工具的相应位置
初始化本地仓库
创建一个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日志基本规范编写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
暂存修改
查看修改状态
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
打标签
创建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地址:
我的个人博客: