本文共 1797 字,大约阅读时间需要 5 分钟。
综述:来了新的公司,以前用的是svn,现在是git,在这里总结学习下,提高自己的认识。
svn、vcss系统等都是集中式的版本控制系统,git是分布式的。两者的区别是:
SVN
面试问题:
在集中库创建一个hotfix分支,进行修改后将其push到集中库中,然后发送一个pr向QA请求合并代码到production库中。
首先将远程的分支拉下来。
做好代码的取舍,解决冲突,然后再次将代码提交即可。
解决外冲突时候还要再提交一次pr。
每次从远程拉取代码的时候,本地有自己临时修改的代码,先使用git stash将自己修改的临时代码保存起来,拉取下来之后,再使用git pop将修改的代码合并进去,这个操作,针对冲突的情况有大的用处,如果没有冲突,则没有必要性;
使用git sync,弹出弹框后,选择从远程分支拉去代码,拉下来之后,解决冲突,解决完之后,标志文件为resolved状态,
标志之后,使用switch/checkout切换后自己的topic分支,再起提交修改之后的topic分支代码即可;
还有代码在冲突时,是针对每一行内容的比对,同时修改一个文件,只要不是同一个内容,不会引起冲突。
上图展示了git的整体架构,以及和各部分相关的主要命令。先说明下其中涉及的各部分。
工作区(working directory),简言之就是你工作的区域。对于git而言,就是的本地工作目录。工作区的内容会包含提交到暂存区和版本库(当前提交点)的内容,同时也包含自己的修改内容。
暂存区(stage area, 又称为索引区index),是git中一个非常重要的概念。是我们把修改提交版本库前的一个过渡阶段。查看GIT自带帮助手册的时候,通常以index来表示暂存区。在工作目录下有一个.git的目录,里面有个index文件,存储着关于暂存区的内容。git add命令将工作区内容添加到暂存区。
本地仓库(local repository),版本控制系统的仓库,存在于本地。当执行git commit命令后,会将暂存区内容提交到仓库之中。在工作区下面有.git的目录,这个目录下的内容不属于工作区,里面便是仓库的数据信息,暂存区相关内容也在其中。这里也可以使用merge或rebase将远程仓库副本合并到本地仓库。图中的只有merge,注意这里也可以使用rebase。
远程版本库(remote repository),与本地仓库概念基本一致,不同之处在于一个存在远程,可用于远程协作,一个却是存在于本地。通过push/pull可实现本地与远程的交互;
远程仓库副本,可以理解为存在于本地的远程仓库缓存。如需更新,可通过git fetch/pull命令获取远程仓库内容。使用fetch获取时,并未合并到本地仓库,此时可使用git merge实现远程仓库副本与本地仓库的合并。git pull 根据配置的不同,可为git fetch + git merge 或 git fetch + git rebase。rebase和merge的区别可以自己去网上找些资料了解下。
转载地址:http://fcox.baihongyu.com/