您好、欢迎来到现金彩票网!
当前位置:众彩 > 分支 >

通过对比更好的了解Git

发布时间:2019-05-08 19:37 来源:未知 编辑:admin

  Git已经成为我们日常接触最多的工具,借助日常Git使用经验积累和Google搜索想必大家对它了如指掌了吧,然而事实真的是如此吗?

  为什么会出现这种现象呢?网上大多数资料是操作过程以及如何使用的范例,极少会深入分析其原理过程。这里我就跟大家图解分析一下几个常用命令的原理,并且通过对比更容易的理解什么样的场景对应什么命令。

  我们合并分支经常会用到merge,其实rebase能达到殊途同归的作用;

  Featrue是我们创建的一个分支开发功能,现在另外一个人在master上添加了两个提交;

  每次merge合并更改后feature会产生一个合并提交历史,如果merge很多整个分支的提交历史看起来不怎么清晰干净,不容易理解。

  rebase执行的操作相当于先回到Fork之前的共同commits点(也就是白色共同的区域),再根据featrue之后提交绿色点的commits,在master分支的最后提交添加绿色点的commits,生成新的Feature分支。

  说完对比了,趁热打铁我们再说下rebase的更重要的一个功能,这就是交互式的rebase;

  交互式的rebase解决了一个开发非常头痛的问题,每次功能分支开发完,有时会产生很多的commit,如果一个个合并到主干上,不仅混乱而且不容易revert回退;此时rebase命令可以帮助开发合并这些commit,使得提交历史一目了然,更容易理解;

  (注:发起pull request之前,合并commit,可以保证主要分支commit提交历史清晰。)

  通过指定HEAD~3作为新的提交,并没有做分支的操作,只是把最后的3次commit提交重写。

  此时会列出了dev2分支的最新的3个commit,排列顺序是越下面越新,默认是pick操作命令。

  我们这里默认把最新的两个commit合并到第一个里面,然后保留提交信息,把最新的两个commit的操作命令修改为squash。

  (如果不需要最新的一个commit提交信息,可以修改其操作命令为fixup即可。)

  保存后会显示出这三个commit合并后的详细信息,确认没问题了保存退出即可;

  查看一下git log,可以看到最新的一条commit包含了之前三个的commit提交信息;大功告成。

  提交commit信息之后,有时会发现跟预期的效果不一样,想要回退到之前的状态,这时我们就可以搬出Git的另外两个常用命令,这就是revert和reset。

  经常有这种情况发生,一个cherry-pick做好之后测试不通过需要回滚,这时就会用到 reset revert命令了;现在通过例子对比一下这两条命令。

  在提交的时候,reset将该分支的HEAD从末端往前移动,用来移除当前分支的某些提交;直接删除指定的commit;

  hotfix分支最后两个提交会被扔掉,也就是下次提交的时候,Hotfix的最新的两个提交会从分支提交历史中删除;

  revert撤销一个提交会创建一个新的提交,版本会递增,这样做提交历史就会比较干净容易处理;

  git revert 不会改变已有的提交历史,git revert更加安全,更适合用在公共分支上;

  使用git log查看最新的一个提交历史,接下来我们撤销最新的这个 f3a08e0

  界面会显示出 Revert + 最新的commit提交历史的注释信息以及该commit带来的文件改变;

  现在撤销生效了,我们git log确认一下提交历史,如果无误开发分支会生成一个新的提交历史记录信息;

  这里最新的一个commit会显示出撤销所创建的提交历史,下面即是撤销前最新的一条commit;你也可以这样理解,最新的一条是+1,撤销创建的是-1,加起来相当于这两个commit对该分支没有任何作用;

  说完了Git的命令,接下来说下Git分支的工作流程,我们使用的Git工作流程大致可以分为三类,即是Git flow,Githubflow以及Gitlab flow,结合自己的使用经验本来打算写,但是网络上已经出现了针对这三种工作流程作出的详细文章,所以就不再讲解,如有兴趣可以看一下两篇即可;这里针对这三种不同的工作流程做一下简要对比:

  多分支类型,主分支和开发分支并列,功能分支补丁分支预发布分支;分支类型细化清晰

  由于工作中很多时间都在跟Git打交道,这里也来总结一下经常遇见的错误和Git的一些使用经验,希望对大家有用。

  git pull从远程获取最新版本到本地merge到本地仓库;而fetch无疑更加安全,从远程获取版本后,手动执行进行合并;

  前者不利于保持commit提交信息,不利于回滚;建议采用后者,发生合并产生一个单独的合并节点。

  这样处理既让分支提交信息混乱不清晰,而且不利于回撤;使用rebase手动处理-具体方法已在文章开头作详细介绍;

  这样使得你得提交更小,相比团队其他人更容易整合更新,避免merge到主分支的冲突;如果极少的提交更新,单个更新会变得更大,别人合并冲突也不好解决

  当代码的逻辑块完成后尽早提交和经常提交,临时需要提交的可以考虑Git的Stash功能暂时提交。

  这种情况下一般是因为之前的操作帐号认证有问题,或者是帐号连接不上,即使帐号没问题后,依然会如此报错,这时你需要重新设置下个人帐号信息。

  在做git pull 或git push时传输文件比较大的时候,容易出现:

http://jigsawesl.com/fenzhi/164.html
锟斤拷锟斤拷锟斤拷QQ微锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷微锟斤拷
关于我们|联系我们|版权声明|网站地图|
Copyright © 2002-2019 现金彩票 版权所有