Git | 如何优♂雅地管理版本

Git

什么是Git?

Git直接翻译是「蠢货,饭桶」,然而倒是由天才开发出来的,被全世界最活跃的开发者使用的版本管理系统。多是一些黑色幽默吧,就像Geek这个词同样。git

这里简单介绍一下,详情请查阅资料,本文主要是要讲解一下使用中的一些问题。github

Git是一款免费、开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。  Git的读音为/gɪt/。app

Git是一个开源的分布式版本控制系统,能够有效、高速的处理从很小到很是大的项目版本管理。 Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。分布式

经常使用基本命令

git init:初始化 git clone:克隆 git status:查看状态 git add:添加 git commit:提交 git pull:拉 git push:推工具

以上几个命令比较简单,略微查下资料便可顺利使用。测试

稍复杂基本命令

git log: 查看全部commit记录。命令行

git tag: 在进行客户端开发时,常会考虑到版本。使用git tag v1.0,那么就在当前代码状态下新建了一个v1.0的标签,使用git tag能够查看当前全部标签。使用git checkout v1.1的话,那么就切换到v1.1的代码状态下。翻译

git diff: 比较当前文件和暂存区的差别,两次commit之间的差别,两条分支之间的差别,两个版本库之间的差别。版本控制

git checkout: 切换,checkout能够切换标签,分支。checkout还能撤销尚未add进暂存区的代码,好比git checkout readme.md便可撤销对于md文档的改动。code

git rm --cached: 移除暂存区中等待提交的代码

git remote add origin test: 本地仓库与远程名为tes的t仓库进行关联

别名alias

当常用Git时,会在输入命令上消耗一些时间,尤为是一些比较长的命令,这时候用户能够自定义别名,用来简化命令。好比: git config --global alias.co checkout git config --global alias.ci commit git config --global alias.psm 'push origin master' git config --global alias.plm 'pull origin master'

###下面是这篇文章所要讲的重点:团队协做。

####分支

  • 什么是分支?为何须要分支?

能够设想这么一个状况,假如一款产品只有一份代码,而须要多人开发,那么每一个人都在这一份代码上随意修改,那岂不是乱了套?

这时候咱们就须要用到分支,使一个项目组中的不一样开发者相互独立,互不干扰。 在云端,首先须要一份代码之源,咱们称之为:主分支(master),犹如青藏高原巴颜喀拉山脉之于黄河。另一条重要分支是开发分支(develop)。

能够归纳为: master:随时处于准备发布状态 develop:最新的开发状态

  • 初步协调团队

线上通常保留master,develop两条分支,开发者首先从master分支pull下代码,而后在本地基于master再新建本地develop分支,而后在develop分支上进行开发。

  1. 若在本地完成开发内容,能够将本地develop合并到本地master,将本地master推到线上master,切换回本地develop,将本地develop推到线上develop。(有点拗口,其实就两个步骤)
  2. 若在本地只开发到一半,能够将本地develop推到线上develop。
  • 命令行
  1. git branch test :新建test分支。须要提一下的是,所建分支是基于当前分支的。
  2. git checkout test:切换到分支test
  3. git checkout -b test:将上述两步合为一步。
  4. git push origin test:将本地test分支推送到远程仓库。
  5. git branch:查看本地分支列表。
  6. git branch -r:查看远端分支列表。
  7. git branch -d test:删除本地分支test
  8. git branch -D test: 强制删除本地分支,为何要强制删除?由于在一些状况下是没法常规删除的,好比:你的test分支自己还存在未合并的代码,此时想要使用 git branch -d a是没法删除这个分支的,会出现智能提示。
  9. git push origin :test:删除远程分支。
  10. git checkout develop origin/develop:将远程分支迁移到本地。

####合并 合并有两种方式:merge rebase

  • merge

假如在test分支上进行开发,开发完成后想要把分支合并到master分支。

  1. 首先须要切换到master分支 git checkout master
  2. git merge test 不出意外就能将test分支合并进来,可是须要考虑意外状况:发生版本冲突。
  • rebase rebase和merge有殊途同归之处,使用rebase也能达到合并分支的效果。 git checkout master git rebase test

可是这两点的差别在哪?这是stormzhang的一个比喻:

rebasemerge 的区别大家能够理解成有两个书架,你须要把两个书架的书整理到一块儿去,第一种作法是 merge ,比较粗鲁暴力,就直接腾出一块地方把另外一个书架的书所有放进 去,虽然暴力,可是这种作法你能够知道哪些书是来自另外一个书架的;第二种作法就是 rebase ,他会把两个书架的书先进行比较,按照购书的时间来给他从新排序,而后从新放置 好,这样作的好处就是合并以后的书架看起来颇有逻辑,可是你很难清晰的知道哪些书来自哪一个书架的。

冲突

两我的在两条分支上开发不一样的功能,而后依次合并到主分支,通常来讲两人各司其职是不会出现问题的。可是有些状况,两我的对同一块公共代码进行了更改,好比工具类。 此时第一我的能够顺利合并master,可是第二我的提交时会出现冲突,须要手动解决冲突才能顺利合并。

在解决冲突问题时,咱们能够根据提示的代码差别进行更改后从新提交。

Stash

假如咱们已经在一个分支开发到了一半,如今须要切换到别的分支去完成一些任务,那么如今当前的代码如何保留呢?

此时须要用到stash,固然前提是没有commit。 首先执行 git stash 此时会将尚未commit的代码保存到一个暂存区,此时执行git status查看,会发现当前分支没有等待提交的代码。 git stash list能够 查看暂存区有多少条记录(一条分支暂存的全部代码只会生成一条记录)

此时能够切换到其余分支,将任务完成,再切回到原来的分支,此时,如何将未提交的代码还原? 执行git stash apply,而后使用git stash drop将暂存区的记录删除。 而git stash pop至关于将上述两步变为一步。

进阶协调

理想化的状态是这样:好比有三我的开发一款产品,那三我的分别建立三个分支,在各自的分支上完成后合依次合并到master。而现实状况的干扰因素却多得多。这时候须要用到分支管理流程GitFlow

  • 通常状态下有两个主要分支: master:随时处于准备发布状态 develop:最新的开发状态

若是出现了线上版本出现严重bug须要紧急修复,或者某些功能完成后出现了需求变动,这时,须要再引入三个辅助分支。

  • feature: 开发新功能的分支, 基于 develop, 完成后 mergedevelop
  • release: 准备要发布版本的分支, 用来修复 bug,基于 develop,完成后 mergedevelopmaster
  • hotfix: 修复 master 上的问题,紧急状况, 等不及 release 版本就必须立刻上线. 基于 master, 完成后 mergemasterdevelop
情景:

假如咱们如今的项目有masterdevelop分支

  • 如今我准备开发一个登陆功能,B同窗准备开发一个注册功能,那么我须要基于develop分支新建 git branch feature/login,B同窗须要基于develop新建git branch feature/register

  • 好比忽然说线上版本的图片显示出了bug,须要紧急修复,尽快上线,那么须要在master分支下执行 git branch hotfix/imgDisplay,修复完成后合并到masterdevelop

  • 若是某一阶段开发的差很少了,功能都已经合并到了develop,如今须要对develop上的代码进行一个总体的测试,假如测试经过,能够发布到正式环境,此时能够基于develop新建一个分支git branch release/v1.0

这是一个规范化的分支管理流程,可能在小团队的开发中,有些步骤能够忽略,可是我建议仍是按照这一套逻辑管理代码会更为高效。

固然,若是你以为输入这些命令很麻烦,尤为是能够将命令行合并为命令块的状况,你可使用gitflow 推出的一套工具,简化命令。开源地址:https://github.com/nvie/gitflow

相关文章
相关标签/搜索