标签:本地库 建仓 生产环境 rem 项目文件 pull xom eol git merge
对Git使用的一些基础介绍。
首先让我们来对Git使用遇到的一些常用术语有个认识。
其次,我们需要对版本工具遇到的一些容易混淆的概念进行理解。
与传统版本控制工具区别
传统的CVS及SVN都是集中式的版本控制系统,而Git是分布式的,相当于每个人本地都有一份完整的版本库备份,更加安全,还可进行离线版本控制最后统一推送。Git把内容按元数据方式存储,最小控制单位是提交,直接记录快照,Git只做增加操作即使是删除文件也是进行标志增加一个记录而非直接删除文件内容;而SVN是按文件进行存储,进行差异比较。Git的分支、撤销、重置等功能都相当于对改变当前HEAD指向的提交,所以速度很快,而SVN的分支功能相当于另外备份整个项目文件,所以基本没什么用。
命令\作用对象 | 文件 | commit |
---|---|---|
reset | 清除文件的未提交改动 | 丢弃私有分支中某次提交之后的所有提交,或者丢失未提交的改动 |
checkout | 放弃工作目录中的所有改动 | 切换分支,或者检出某个版本的文件快照 |
revert | 将公共分支的代码强制覆盖为某个版本的代码 |
当合并出现冲突,如果要撤销到未合并的状态,使用reset命令,不能用revert。
如图5,假设master分支也提交了一个快照C3,同时有个experiment分支在C2快照后提交了一个新的快照C4,使用git checkout master;git merge experiment
会将把两个分支的最新快照(C3?和?C4)以及二者最近的共同祖先(C2)进行三方合并,合并的结果是生成一个新的快照(并提交),如图6。
而使用git checkout experiment;git rebase master
可将提交到某一分支上的所有修改都移至另一分支上,如图7。最后再使用{git checkout master;git merge experiment}进行一次快进合并,这样最终的分支树(版本历史)即看起来就清晰明了。
rebase 和 merge的另一个区别是rebase 的冲突是一个一个解决。
接着,介绍一下使用git命令的一些基本操作流程。
clone项目
提交代码并推送到远端仓库
由于本地代码不是最新版本推送失败,需要拉取代码进行合并解决冲突后再重新提交并推送,要使用rebase方式来进行拉取,方便版本历史查看。
切换分支、合并分支、撤销合并
使用rebase将当前分支的快照变基到选择的分支的快照之后(相当于将另一个分支的修改合并到当前分支,并且保持版本树的清晰)
变基前
变基后
切换分支,并将当前分支的快照变基到目标分支之后
变基前
变基后
提交代码时有一些文件例如日志、临时文件、本地IDE配置文件、编译生成的中间文件、可执行文件等等没必要放到版本库中,可以在工作区中新建一个.gitignore文件,把要忽略的文件名填进去,提交代码时git就会忽略这些文件。不同类型项目的忽略文件模板可在https://github.com/github/gitignore这个链接上面下载,具体的忽略文件的语法规则可自行搜索。
可对特定的路径配置某些设置项。一个典型的用法是如果dev分支和master分支有一些config配置文件内容分别为开发环境和生产环境。每次合并dev分支到master分支的时候会出现冲突,此时可在master分支下新增.gitattributes文件,指定特定的文件合并分支时不进行合并,例如.gitattributes merge=ours、src/main/resources/jdbc.properties merge=ours指定.gitattributes本身文件合并策略为冲突时以当前分支的为准,配置完设置项后还需要执行git?config?merge.ours.driver?true命令启动设置项。以后在master分支下合并dev分支的代码时就不会合并那些文件。
标签:本地库 建仓 生产环境 rem 项目文件 pull xom eol git merge
原文地址:https://www.cnblogs.com/universal/p/10420221.html