Git 后续——分支与协作

本文写于 2020 年 9 月 1 日

之前一篇文章写了 Git 的基础用法,但那其实只是「单机模式」,Git 之所以在今天被如此广泛的运用,是脱不开分支系统这一概念的。

最近几天在滴滴实习,第一次接触到了团队是如何利用 Git 进行协作的。可以说分支系统对于协作来说是重要的一环,接下来就让我们来一窥究竟吧。

什么是分支

首先,什么是分支?

我们之前说了,Git 会记录你的文件修改。你修改了哪一行哪一个字符,只要你进行了 commit 操作,Git 都会帮你记录的清清楚楚。

而这一系列的 commit 提交是有先后的。所以根据时间,我们可以排出一个时间轴

--> 第一次提交 --> 第二次提交 --> 第三次提交 --> ... --> 第 n 次提交

这就是主分支 master。如果你是在命令行里打开存在 git 的目录就会发现,在文件目录的最后显示了一个 master

为什么需要分支

这个时候我们的开发团队突然不是一个人了,有另一个同学加入了项目,你需要和他进行协同开发。

我们现在面临的是两个需求,A 和 B。你负责 A,他负责 B。

但是有一个问题,他的 B 需求比较好解决,只需要 1 天就可以完成,可你的 A 需求则需要 5 天时间。

如果你们俩同时在 master 分支上进行合作就会出现问题。

比如说你的 A 需求是可以拆分成 3-5 个小块进行 commit 的。(请保证您的每个 commit 不会进行太多的修改,这样便于项目管理与后续查看)那么当你 commit 之后,他面对的将会是你的 A 需求的某一个或者某几个小块的更新,即他的代码会变成不完整的代码。

具体点来说,你的需求需要 5 天才能完成,第一天你写了 20% 的代码,如果立刻 commit,由于代码还没写完,不完整的代码库会导致另外一个人不能干活。

还有一点就是代码丢失的风险,如果等你的代码全部写完再一次提交,会存在丢失每天进度的巨大风险!

这个时候就该分支出场了。

如何使用分支

分支就是「平行宇宙」。当你此刻使用 git checkout -b my-first-branch 就会创建一条名为 my-first-branch 的分支,并且切换过去。

这个分支可以用于记录你这段时间的 commit

--> 第一次提交 -------> 第二次提交 ----> 第三次提交 --> ... --> 第 n 次提交

分支my-first-branch ----> 分支的第三次提交 ----> 分支的第四次提交

当你完成之后,分支即可通过 git merge <branch-name> 和其他分支进行合并,这样所有在该分支上的操作就会被合并到另一个分支上了。

这这个分支是属于你自己的分支,别人看不到,还继续在原来的分支上正常工作,而你在自己的分支上干活,想提交就提交,直到开发完毕后,再一次性合并到原来的分支上,这样一来既安全、又不影响别人工作。

处理合并冲突

如果你在 readme.txt 中修改了一行,另一个人也修改了 readme.txt 中的同一行。

这个时候你们合并文件会出现问题吗?

肯定会呀!Git 会告诉你:

Auto-merging readme.txt
CONFLICT (content): Merge conflict in readme.txt
Automatic merge failed; fix conflicts and then commit the result.

为了英文不太好的同学,我来翻译一下:readme.txt 文件存在冲突,必须手动解决冲突后再提交。

我们该怎么查看这个冲突呢?不错,就是 git status,顾名思义嘛,各种状态都可以由他查看。

除此之外,我们还可以直接看文件,Git 已经帮我们放了点东西上去:

<<<<<<< HEAD
明月几时有,把酒问青天
=======
明月都没有,喝酒不问天
>>>>>>> my-first-branch

Git 会告诉我们几条分支分别在这一句上改了什么,让我们自行判断,自行删除。

我们分别删掉半句,变成这个样子后:明月几时有,喝酒不问天。再进行 git commit -m 'merge conflict',就可以了。

这就是分布式管理系统的好处。

(完)

Git 后续——分支与协作的更多相关文章

  1. 版本控制git之三-多人协作 变基 推送 拉取 删除远程分支

      版本控制git之三-多人协作 wangfeng7399已关注0人评论350人阅读2019-02-20 21:33:08   如果你想获得一份已经存在了的 Git 仓库的拷贝,比如说,你想为某个开源 ...

  2. git branch 分支

    几乎所有的版本控制系统都以某种形式支持分支. 使用分支意味着你可以把你的工作从开发主线上分离开来,以免影响开发主线. 在很多版本控制系统中,这是一个略微低效的过程——常常需要完全创建一个源代码目录的副 ...

  3. 好代码是管出来的——Git的分支工作流与Pull Request

    上一篇文章介绍了常用的版本控制工具以及git的基本用法,从基本用法来看git与其它的版本控制工具好像区别不大,都是对代码新增.提交进行管理,可以查看提交历史.代码差异等功能.但实际上git有一个重量级 ...

  4. Git Flow 分支管理简述

    概述 Git 是什么 Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目. Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的 ...

  5. 使用VS2013、TFS2013和Git进行分布式团队协作

    题记:呵呵,首先声明,题目起的有点大,其实我只想介绍下VS2013和TFS2013新加入的Git功能,也不是在VS中使用Git的详细向导(以后有空再详细分享给大家).这篇文章虽然在写这篇文章<V ...

  6. Git管理分支

    管理分支:git branch 直至现在为止,我们的项目版本库一直都是只有一个分支 master.在 git 版本库中创建分支的成本几乎为零,所以,不必吝啬多创建几个分支.下面列举一些常见的分支策略, ...

  7. 图文详解如何利用Git+Github进行团队协作开发

    团队协作开发中,大部分都会用到版本控制软件,比如Git.Svn等.本文将通过一个实例,详细讲解在真实的工作环境中,一个团队应该如何利用Git+Github进行协作开发,即详解Git工作流程.并就其中比 ...

  8. git——更新分支、提交代码、切换分支、合并分支

    还是直接贴教程吧:https://git-scm.com/book/zh/v2 如何把本地idea上的项目上传到github上:https://www.cnblogs.com/gougouyangzi ...

  9. Git:分支的创建、合并、管理和删除

    了解分支 如果想实现多人协作.划出Bug区.Feature区等功能,就需要分支功能.(确实很强大的地方) 每次commit时,Git都把它们串成一条时间线,这条时间线就是一个分支.截止到目前,只有一条 ...

随机推荐

  1. MySQL碎片整理小节--实例演示

    MYSQL之磁盘碎片整理 清澈,细流涓涓的爱 数据库引擎以InnoDB为主 1.磁盘碎片是什么 ​ InnoDB表的数据存储在页中,每个页可以存放多条记录,这些记录以树形结构组织,这棵树称为B+树. ...

  2. Linux下切换python2和python3

    为什么需要有两个版本的Python Python2和Python3不兼容是每个接触过Python的开发者都知道的事,虽说Python3是未来,但是仍然有很多项目采用Python2开发.Linux的许多 ...

  3. Vue-router实现单页面应用在没有登录情况下,自动跳转到登录页面

    这是我做前端一来的第一篇文章,都不知道该怎么开始了.那就直接奔主题吧.先讲讲这个功能的实现场景吧,我们小组使用vue全家桶实现了一个单页面应用,最初就考虑对登录状态做限制.比如登录后不能后退到登录页面 ...

  4. 干货,看微信小程序后台用户数据如何演变和递增

    这几天发现附近小程序又多了好几家,其中有普通小程序和门店小程序,把它们做一个对比,门店小程序更多的像一张名片,只有基本的企业名称.地址.营业时间.电话和门店照片,和普通小程序相比显得逊色许多.楼下的水 ...

  5. JDK卸载和彻底删除

    第一步:点击"控制面板". 第二步:点击"卸载程序". 第三步:进入到"程序和功能"界面,找到jdk的两个程序:①java 8 update ...

  6. 利用css3实现3D轮播图

    动画实现主要利用了z-index将层级关系改变,从而实现了焦点图的效果:css3属性 transform rotate 来实现图片的动画效果 .transition实现过度动画! * { margin ...

  7. LC-844

    给定 s 和 t 两个字符串,当它们分别被输入到空白的文本编辑器后,如果两者相等,返回 true .# 代表退格字符. 注意:如果对空文本输入退格字符,文本继续为空. 示例 1: 输入:s = &qu ...

  8. Linux centos7系统列出systemd下所有正在运行的服务

    Linux系统提供各种系统服务(如进程管理.登录.syslog.cron等)和网络服务.Linux支持不同的方法来管理服务(启动.停止.重启.在系统启动时的自动启动等),通常通过流程或服务管理器. 大 ...

  9. Vmware虚拟机三种网络模式详解(转载)

    原文来自http://note.youdao.com/share/web/file.html?id=236896997b6ffbaa8e0d92eacd13abbf&type=note 由于l ...

  10. 帝国cms发布文章对哪些数据表做了操作

    帝国cms 发布一篇文章会影响哪些数据表 insert into phome_enewsfile_1(pubid,filename,filesize,adduser,path,filetime,cla ...