在开发中将git运用自如
写这篇文章的初衷是记录自己在开发中使用git遇到的问题和如何利用git进行高效的开发。个人理解来看,很多人对git运用不自如主要是两方面的原因:1、死记硬背命令,这个其实可以通过help或者官网的文档探索命令,而且命令都是熟能生巧的。2、对git的原理理解不到位。在对于多分支的代码开发中,很多情况不及时更新代码,或者无法认识到自己在开发分支的操作在合入时对他人开发教程的影响,这些其实是可以通过了解git的原理去避免的,这样也会使我们的开发高效化。
1、git原理
对于刚进入公司的小白,往往都是先学习如何安装git,然后配置好环境后在clone代码,创建分支去进行开发。可能并不知道git是什么,为什么用git进行开发?git作为分布式版本控制系统,可以保证团队成员每个人都有本地的一份代码仓库,每个人在自己的机器上提交代码,查找历史,大多数的操作通过本地进行,来避免网络等限制。换句话说,团队成员本地互相开发的时候互相不限制,最后通过自己的本地仓库和远程主仓进行统一规则的合并来保证代码的提交与运行。
我们在使用git开发中还需要了解工作区,暂存区,仓库区,远程仓库这几个概念。
Workspace: 工作区,平常用编辑器修改代码的地方。
Index / Stage: 暂存区,用于临时存放你的改动,事实上它只是一个文件,工作区修改提交,保存即将提交到文件列表信息
Repository: 仓库区(或版本库),就是安全存放数据的位置,将暂存区的内容通过commit放入仓库的版本
Remote: 远程仓库,托管代码的服务器,可以简单的认为是你项目组中仓库中用于远程数据交换
通过使用git的提交流程一般是这样的:
1、使用编辑器对工作区修改代码;
2、工作区的修改通过git add 命令提交到暂存区域;
3、暂存区内容通过commit生成commit message,并放入当前的git仓库(当前开发分支)
4、 如果代码在当前分支上review 没问题,通常都会push或者merge和主分支master进行合并,即将你开发的代码合入主仓,完成最终的提交。
对git进行进一步入门学习的话,可以参考廖雪峰老师的git课程,对小白会更加友好一些:this
2、开发中必备的git操作
- git pull <远程主机名> <远程分支名>:<本地分支名> 省略号后面通常可以省略通常用作将远程分支代码拉取过来和本地分支进行合并
通常用作将远程分支代码拉取过来和本地分支进行合并
常用命令: git pull origin master - 查看已经克隆项目的远端地址
git remote -v - 查看修改的代码
A git status命令可以查看当前工作区的修改文件,和已经提交到暂存区文件(只能看文件名,无法查看内容)
B 查看当前工作区修改的文件内容可以使用git diff filename ,
C 查看暂存区的内容 git diff –cached (filename) / git diff — staged (把暂存区与版本库最近一次 commit 的内容进行比较)
D 查看从暂存区commit到分支的代码: git log (git log -p -number 获取number次)获取commit_id ,使用git show commit_id 即可
E 将未正式提交代码(工作区 + 暂存区) 与最新commit代码比较可以直接使用 git diff HEAD - 修改commit注释
实际开发中会存在commit message写错或需要补充的情况。
A 修改最后一次commit的信息,且没有push上去:git commit –amend
B 修改多次commit信息, 回退到当前版本的倒数第n次状态 : git rebase -i HEAD~n, 将修改行的pick 改为edit,写入(ctrl+o),离开(ctrl + x), 再使用git commit –amend,便完成一条commit的修改,如果是多条,还需要git rebase –continue继续进行。 - 撤销和回滚操作
A git status 查看当前状态
B 如果是工作区中 撤销文件 git checkout –filename, 多个文件撤销 git checkout . 或者使用git restore filename
C 如果是暂存区中 撤销文件 git reset HEAD filename, 多个文件 git reset HEAD 或者使用git restore –staged filename. (相当于撤销git add .回到工作区)
D commit之后撤销 git reset <commit_id>
参考链接: this - 不提交当前分支前提下切换分支
git stash操作把修改但不想提交的内容保存到栈中(自己喜欢称呼栈,更亲切),git stash save “message” 给保存的内容添加备注,git stash list 查看栈中存储的内容, git stash pop 将最近的一次保存的内容pop到工作区,删除保存内容,git stash apply stash@{1} 不删除保存内容,后续删除需要git stash drop stash@{1} - git rebase 和 git merge的区别
参考链接:this - git reset 和 git revert的区别
参考链接:this - git push -u origin master 指定
origin
为默认主机,后面就可以不加任何参数使用git push
了。