title: git实践 author: Gamehu tags: - git categories: - 工作 date: 2019-08-20 16:57:00 --- 据说再2016年我就开始接触git,当时还用台式机、笔记本作为两个用户进行git的一些实践和原理的了解,但是正儿八经在项目中用git还是现在,经过一年多的实践呢,入了一些坑所以觉得是时候展现真正的技术了,简单积累一下我比较常用的。 {% asset_img boat-164989.jpg Image by Pixabay License from Pixabay %} ** git提交规范 ** 这块是很重要很重要的,在代码评审、问题追溯、代码回滚、代码培训等的时候都需要用到这个东西,但是团队内暂时还没有对此做硬性要求。不过我个人是一直比较注重提交的内容,因为以前吃过亏,没有友好的commit内容某些场景下很难定位。虽然我比较注重但是还是比较游击队的打法,最近看到了个东西叫commitizen,它可以配置一套标准的提交规范,所以准备用起来。 **配置commitizen** [https://juejin.im/post/5cbd1fdf5188250a546f565f](https://juejin.im/post/5cbd1fdf5188250a546f565f "安装链接") - 可借助工具使提交更加规范:安装cz-conventional-changelog,即使用第三方的提交模板,这儿表示用的AngularJS的提交模板 - 用husky配合git hooks 进行预检查 package.json { ``` "husky": { "hooks": { "commit-msg": "(echo HUSKY_GIT_PARAMS: %HUSKY_GIT_PARAMS%) && commitlint -E HUSKY_GIT_PARAMS" } }, "config": { "commitizen": { "path": "./node_modules/cz-conventional-changelog" } ``` **git 储藏** 常用git stash命令: (1)git stash save "save message" : 执行存储时,添加备注,方便查找,只有git stash 也要可以的,但查找时不方便识别。 (2)git stash list :查看stash了哪些存储 (3)git stash show :显示做了哪些改动,默认show第一个存储,如果要显示其他存贮,后面加stash@{$num},比如第二个 git stash show stash@{1} (4)git stash show -p : 显示第一个存储的改动,如果想显示其他存存储,命令:git stash show stash@{$num} -p ,比如第二个:git stash show stash@{1} -p (5)git stash apply :应用某个存储,但不会把存储从存储列表中删除,默认使用第一个存储,即stash@{0},如果要使用其他个,git stash apply stash@{$num} , 比如第二个:git stash apply stash@{1} (6)git stash pop :命令恢复之前缓存的工作目录,将缓存堆栈中的对应stash删除,并将对应修改应用到当前的工作目录下,默认为第一个stash,即stash@{0},如果要应用并删除其他stash,命令:git stash pop stash@{$num} ,比如应用并删除第二个:git stash pop stash@{1} (7)git stash drop stash@{$num} :丢弃stash@{$num}存储,从列表中删除这个存储 (8)git stash clear :删除所有缓存的stash **git 回滚** //回滚上一次提交 git reset HEAD~ // 修改最近一次提交的备注 git commit --amend // 修改某一次提交的备注,最后的数字2指的是显示到倒数第几次 git rebase -i HEAD~2 **git 合并** ``` //是将远程主机的最新内容拉到本地,用户在检查了以后决定是否合并到工作本机分支中 git fetch //是将远程主机的最新内容拉到本地并合并 git pull ``` **git 切换分支** //对于已经拉取到本地的分支之间的切换 git checkout 分支名 //对于还没有拉取到本地的分支 git checkout -b remote分支名 本地分支名 **git 撤销merge** ``` //经常在切换分支时,一不小心就merge错了分支或者合并时遇到冲突想取消操作,这命令就好用了 git merge --abort //撤销指定的merge 1.找到最后一次提交到master分支的版本号,即【merge前的版本号】 git log --pretty=oneline 2.回退到某个版本号 git reset --hard 【merge前的版本号】 ``` **git 撤销** {% asset_img reset.jpg%} ``` git reset --soft: 将分支回退到指定提交,工作区维持现状不变,暂存区会在现有基础上增加该commit之后的提交。 git reset --mixed: (默认操作)将分支回退到指定提交,暂存区也被同步为该指定提交,工作区保持不变。 git reset --hard: 将分支回退到指定分支,暂存区和工作区都会被同步为该指定的提交。 git reset --hard 可以回退到某个提交 git revert可以撤销某个提交,撤销会产生一个新的提交 ``` **回退到某个版本并应用指定的几次提交** ``` 切换到目标分支上, 假如当前状态为新合并进了一条commit,只需执行 git reset --hard HEAD~1即可回退到合并前。 或者回退到任何你想要的状态中 git reset --hard commitId, 其中commitId为你想要处于的版本hash code。 示例: git reset --hard 1d7444 #回退到某个版本 git cherry-pick 626335 #将某次commit的更改应用到当前版本 git push origin HEAD --force #强制提交 ``` **根据关键字搜索提交记录** ``` git log --all-match --grep=登录 commit 9f3e61ad63626c3e2e7541430d4af9693e3357ccAuthor: caofu <[caofu@ruijie.com.cn](mailto:caofu@ruijie.com.cn)>Date: Fri Dec 7 13:09:55 2018 +0800 完成单点登录xxxx #查看某次提交的内容 git show 9f3e61ad63626c3e2e7541430d4af9693e3357cc ```