技术贴|五分钟Git入门

zhang11001(43)
Published in
#cn
Words
1665
Reading
8 min
Listen
Play
8y

Git 是一款免费、开源的分布式版本控制系统,用于敏捷高效地处理各种项目。

分布式版本系统?纳尼?Are you kidding me? 这是什么鬼?

对于程序员来说,会用 Git 之类的代码管理工具的会是一项不错的加分项,走向人生巅峰的必备技能之一。 在这里,我会用简单易懂的语言,结合自己的想法,帮助大家理解和使用 Git。

Git 简单来说,就是大家用来合作开发项目的一个工具系统,无论项目大小简单复杂,又或者是你独自开发的项目,用 Git 来帮助合作开发绝对是一个合适的选择。

Git的工作流程

要了解Git,首先要了解的是Git的工作流程

例如:下图显示的是公司里面一条主要的业务线,我们把它称作“master”

有一天,老板拍拍你的肩膀说:“小刘啊,我们有一个新需求,需要在业务线里面加一个新页面,内容不多,你就负责做这个吧。”

然后你在mater上创建了一个新的分支,并且在上面开始进行你的开发 (如下图)

创建名为feature分支并切换过去的命令(checkout):

git checkout -b feature

切换到master:

git checkout master

所谓创建新的分支,可以理解为在业务线的基础上,创建一个新的一模一样的项目文件包,这样在分支上开发就不会影响到原来的业务代码。

而且分支的切换会将项目文件切换,比如你的新分支上在开发一个页面,若你切换回master,在项目文件夹里只会看到原来的业务,找不到你新开发的页面,只有在切换到你自己的分支时才会看到你在这个分支上开发的代码。

好,开发完成了,觉得没问题了,然后就可以将写好的代码推送到远端。

将所有修改过的工作文件提交暂存区(关于暂存区文后会讲解):

git add .

每次add必须添加注释:

git commit –m "你的注释"

推送所有分支到远端:

git push

如果有master权限就直接将你开发的分支合并到master上,又称为merge,或者发送merge请求给管理员,管理员审核你的代码后进行merge

合并命令:

git checkout master //首先切换到master

git merge feature //合并feature分支到master

这样,你新开发的代码就合并到这个业务线了,这个项目因为这次开发而向前延伸.

以上的介绍,就是 Git 最基础的工作流程 分支-开发-推送-合并,所有的都围绕着这个流程展开。

程序一般多,你的历史图将会变得酷炫,

Git的工作流

由三个部分组成:工作区,暂存区,远端

工作区就是你敲代码的地方,暂存区即暂存代码的变更,远端就是用于存放公共项目文件的服务器或电脑。

Git 能识别你在工作区对代码所作的更改,并能通过 add 命令放到暂存区,暂存区的文件通过 push提交到远端,同时我们可以通过 pull 命令将远端的代码拉取(下载)到本地。

拉取所有远端文件到本地并合并:

git pull

注意:任何在工作区或者在暂存区的东西,只要你不推送到远端,都是不会被任何人看到的。

Git协同开发

前面所说的都是个人开发的一些基础知识,但是实际上 Git 通常是使用在协同开发上的,现在给大家讲解下使用工程中经常会遇到的问题

当你在一个分支上开发新的页面的时候,另外一个组件开发的需求来了,老板决定把这个任务交给公司的大牛老李。大牛老李凭借自己多年的丰富经验很快地完成了任务,这时候就出现以下这种情况

最后,当你完成了开发,却发现不能合并到master上。

为什么呢? 因为老李完成了开发并改变了master,而你的分支现在发现当前的master跟它分出来的时候不一样,这样硬要合并,将会发生致命的问题。

那怎么办? 这个时候首先要回到master,拉取最新的master,然后将master合并到你的分支上,最后再将你的分支合并到master。结果如下图:

这样 Git 历史图有点难看,这时就应该用rebase命令。rebase命令可以将整个feature分支移动到master分支的后面,有效地把所有master分支上新的提交并入一起

git checkout feature

git rebase master

然后再合并

这样就更加美观了

这里就不得不提到 rebase 的黄金法则了:绝对不要在公共分支上使用。

公共分支指的不止是你一个人开发的分支,比如 master。

如果 rebase 将 master 分支上的所有提交都移到了 feature 分支后面,但是它只发生在你本地,其他开发者还在原来的 master上工作。因为 rebase 引起了新的提交,Git 会认为你的master 分支和其他人的 master 已经不同了。那么 Git 只能把它们 merge 到一起,导致一个额外的合并提交和两堆包含同样更改的提交。

还有一个需要理解的概念就是冲突

当两条分支对同一个文件的同一个文本块进行了不同的修改,并试图合并,而Git不能自动合并时,这就叫冲突。 这时需要人工处理。(就是讨论下怎么办,协商解决,不要改得不一样) 。

上述所说能够为刚接触 Git 的开发者解决所遇到的大部分问题,希望对大家有所帮助。

技术贴|五分钟Git入门 | Ecency