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仓库进行关联
当常用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分支上进行开发。
git branch test
:新建test
分支。须要提一下的是,所建分支是基于当前分支的。git checkout test
:切换到分支test
。git checkout -b test
:将上述两步合为一步。git push origin test
:将本地test
分支推送到远程仓库。git branch
:查看本地分支列表。git branch -r
:查看远端分支列表。git branch -d test
:删除本地分支test
。git branch -D test
: 强制删除本地分支,为何要强制删除?由于在一些状况下是没法常规删除的,好比:你的test
分支自己还存在未合并的代码,此时想要使用 git branch -d a
是没法删除这个分支的,会出现智能提示。git push origin :test
:删除远程分支。git checkout develop origin/develop
:将远程分支迁移到本地。####合并 合并有两种方式:merge
rebase
假如在test
分支上进行开发,开发完成后想要把分支合并到master
分支。
git checkout master
git merge test
不出意外就能将test
分支合并进来,可是须要考虑意外状况:发生版本冲突。rebas
e和merge
有殊途同归之处,使用rebase
也能达到合并分支的效果。 git checkout master
git rebase test
可是这两点的差别在哪?这是stormzhang的一个比喻:
rebase
跟merge
的区别大家能够理解成有两个书架,你须要把两个书架的书整理到一块儿去,第一种作法是merge
,比较粗鲁暴力,就直接腾出一块地方把另外一个书架的书所有放进 去,虽然暴力,可是这种作法你能够知道哪些书是来自另外一个书架的;第二种作法就是rebase
,他会把两个书架的书先进行比较,按照购书的时间来给他从新排序,而后从新放置 好,这样作的好处就是合并以后的书架看起来颇有逻辑,可是你很难清晰的知道哪些书来自哪一个书架的。
两我的在两条分支上开发不一样的功能,而后依次合并到主分支,通常来讲两人各司其职是不会出现问题的。可是有些状况,两我的对同一块公共代码进行了更改,好比工具类。 此时第一我的能够顺利合并master,可是第二我的提交时会出现冲突,须要手动解决冲突才能顺利合并。
在解决冲突问题时,咱们能够根据提示的代码差别进行更改后从新提交。
假如咱们已经在一个分支开发到了一半,如今须要切换到别的分支去完成一些任务,那么如今当前的代码如何保留呢?
此时须要用到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
, 完成后 merge
回 develop
release
: 准备要发布版本的分支, 用来修复 bug,基于 develop
,完成后 merge
回 develop
和 master
hotfix
: 修复 master
上的问题,紧急状况, 等不及 release
版本就必须立刻上线. 基于 master
, 完成后 merge
回 master
和 develop
假如咱们如今的项目有master
和develop
分支
如今我准备开发一个登陆功能,B同窗准备开发一个注册功能,那么我须要基于develop
分支新建 git branch feature/login
,B同窗须要基于develop
新建git branch feature/register
好比忽然说线上版本的图片显示出了bug,须要紧急修复,尽快上线,那么须要在master
分支下执行 git branch hotfix/imgDisplay
,修复完成后合并到master
和develop
若是某一阶段开发的差很少了,功能都已经合并到了develop
,如今须要对develop
上的代码进行一个总体的测试,假如测试经过,能够发布到正式环境,此时能够基于develop
新建一个分支git branch release/v1.0
这是一个规范化的分支管理流程,可能在小团队的开发中,有些步骤能够忽略,可是我建议仍是按照这一套逻辑管理代码会更为高效。
固然,若是你以为输入这些命令很麻烦,尤为是能够将命令行合并为命令块的状况,你可使用gitflow
推出的一套工具,简化命令。开源地址:https://github.com/nvie/gitflow