Git多人协作与企业级开发模型

目录

1.多人协作一

 2.多人协作二

3.远程分⽀删除后,本地gitbranch-a依然能看到的解决办法

4.企业级开发模型 

4.1.Git的重要性

4.2.系统开发环境

4.3.Git 分⽀设计规范


1.多人协作一

⽬前,我们所完成的⼯作如下:

  • 基本完成Git的所有本地库的相关操作,git基本操作,分⽀理解,版本回退,冲突解决等等
  • 申请码云账号,将远端信息clone到本地,以及推送和拉取。

是时候⼲最重要的⼀件事情了,实现多⼈协作开发!为了做这件事情,我们需要先做⼀些准备⼯作。

我们之前已经将项⽬clone到了指定⽬录,如:

我们在windows环境下,再clone同⼀个项⽬仓库,来模拟和你⼀起协作开发的另⼀名⼩伙伴:

我们打开电脑自带的powershell这个软件

我们切换好目录来

 

实际开发中,每个⽤⼾都有⾃⼰的gitee/github账号,如果要多⼈进⾏协同开发,必须要将⽤⼾添加进开发者,⽤⼾才有权限进⾏代码提交:

 三种邀请用户的方式任选其一

到此,相当于有了两个⽤⼾,分别在linux和windows上针对于同项⽬进⾏协作开发,我们的准备⼯ 作到此结束。

⽬前,我们的仓库中只有⼀个master主分⽀,但在实际的项⽬开发中,在任何情况下其实都是不允许 直接在master分⽀上修改代码的,这是为了保证主分⽀的稳定。

所以在开发新功能时,常常会新建其他分⽀,供开发时进⾏迭代使⽤。

那么接下来,就让我们在gitee上新建dev远程分⽀供我们使⽤:

创建成功的远程分⽀是可以通过Git拉取到本地来,以实现完成本地开发⼯作。

接下来让我们和另⼀名开发的⼩伙伴都将远程仓库进⾏⼀次拉取操作,并观察结果: 

  • 对于我们要操作的是:

之前讲的 git branch 其实只能查看本地分⽀,要查看远程分⽀需要加上-r 选项。但前提是要 pull ⼀下拉取最新的远端仓库,才能看到最新的内容。 

拉取后便可以看到远程的dev分⽀,接着切换到dev分⽀供我们进⾏本地开发。要说明的是,我们切 换到的是本地的dev分⽀,根据⽰例中的操作,会将本地分⽀和远程分⽀的进⾏关系链接。

  • 对于⼩伙伴要操作的是: 

现在,你和你的⼩伙伴就可以在 dev 上完成开发。

⾸先,让我们在 dev 分⽀上进⾏⼀次开发,并 push 到远程。例如:

让我们来看看码云上⽬前仓库的状态:

 ⾄此,我们已经将代码成功推送⾄码云,接下来假如你的⼩伙伴要和你协同开发,碰巧也要对file.txt ⽂件作修改,并试图推送,例如:

我们打开那个file.txt,修改成下面这样子

我们发现不能推送到远程仓库里面去

这时推送失败,因为你的小伙伴的最新提交和你推送的提交有冲突,解决办法也很简单,Git已经提示我们,先用 git pull把最新的提交从 origin/dev 抓下来,然后,在本地进行合并,并解决冲突,再推送。

小伙伴的操作如下:

这个时候我们就发现file.txt文件里面发生冲突了,我们编辑一下这个文件

解决冲突,重新推送: 

期间会出现下面这个,我们输入gitee的账号和密码就ok了 

此时,我们看到远端的码云已经能看到我们的新提交了!

由此,两名开发者已经开始可以进⾏协同开发了,不断的 git pull/add/commit/push ,遇到了 冲突,就使⽤我们之前讲的冲突处理解决掉冲突。

对于你来说,要想看到⼩伙伴的代码,只需要 pull ⼀下即可,例如: 

最后不要忘记,虽然我们是在分⽀上进⾏多⼈协作开发,但最终的⽬的是要将开发后的代码合并到 master上去,让我们的项⽬运⾏最新的代码。接下来我们就需要做这件事情了:

切换⾄ master 分⽀ , pull ⼀下,保证本地的 master 是最新内容。 合并前这么做是⼀个好习惯

 切 换⾄ dev 分⽀ , 合并 master 分⽀,这 么做是因为如果有冲突,可以在 dev 分⽀上进⾏处理,⽽不是在在 master 上解决冲突。 这 么做是⼀个好习惯

切 换⾄ master 分⽀,合并 dev 分⽀

 将 master 分⽀推送⾄远端

此时,查看远端仓库,master已经是最新代码了:

 此时,dev分⽀对于我们来说就没⽤了,那么dev分⽀就可以被删除掉。

我们可以直接在远程仓库中 将dev分⽀删除掉:

总结⼀下,在同⼀分⽀下进⾏多⼈协作的⼯作模式通常是这样:

  1. • ⾸先,可以试图⽤git push origin branch-name推送⾃⼰的修改;
  2. • 如果推送失败,则因为远程分⽀⽐你的本地更新,需要先⽤git pull试图合并;
  3. • 如果合并有冲突,则解决冲突,并在本地提交;
  4. • 没有冲突或者解决掉冲突后,再⽤git push origin branch-name推送就能成功!
  5. • 功能开发完毕,将分⽀merge进master,最后删除分⽀。 

 2.多人协作二

⼀般情况下,如果有多需求需要多⼈同时进⾏开发,是不会在⼀个分⽀上进⾏多⼈开发,⽽是⼀个需 求或⼀个功能点就要创建⼀个 feature 分⽀。

现在同时有两个需求需要你和你的⼩伙伴进⾏开发,那么你们俩便可以各⾃创建⼀个分⽀来完成⾃⼰ 的⼯作。在上个部分我们已经了解了可以从码云上直接创建远程分⽀,其实在本地创建的分⽀也可以 通过推送的⽅式发送到远端。在这个部分我们就来⽤⼀下这种⽅式。

  • 对于你来说,可以进⾏以下操作:

新 增本地分⽀ feature-1 并切换

新 增需求内容 创建 function1 ⽂件

将 feature-1 分⽀推送到远端

  • 对于⼩伙伴来说,可以进⾏以下操作: 

创建并切换到feature-2分支下

创建新文件function2

将feature-2分支推送到远程仓库

此时,在本地,你看不⻅他新建的⽂档,他看不⻅你新建的⽂档。并且推送各⾃的分⽀时,并没有任 何冲突,你俩互不影响,⽤起来很舒服!!

再来看下远端码云上此时的状态:

对于你的feature-1分⽀:

对于⼩伙伴的feature-2分⽀:

正常情况下,你俩就可以在⾃⼰的分⽀上进⾏专业的开发了!

但天有不测⻛云,你的⼩伙伴突然⽣病了,但需求还没开发完,需要你帮他继续开发,于是他便把 feature-2 分⽀名告诉你了。

这时你就需要在⾃⼰的机器上切换到feature-2分⽀帮忙继续开发,要做 的操作如下:

必须先拉取远端仓库内容

可 以看到远程已经有了 feature-2

切 换到 feature-2 分⽀上,可以和远程的 feature-2 分⽀关联起来,  否 则将来只使⽤ git push 推送内容会失败 

切换成功后,便可以看⻅feature-2分⽀中的function2⽂件了,接着就可以帮⼩伙伴进⾏开发:

继续开发 

推送内容

查看远程状态,推送成功了:

 

这时,你的⼩伙伴已经修养的差不多,可以继续进⾏⾃⼰的开发⼯作,那么他⾸先要获取到你帮他开 发的内容,然后接着你的代码继续开发。或者你已经帮他开发完了,那他也需要在⾃⼰的电脑上看看 你帮他写的代码:

我们发现代码没有pull下来

Pull ⽆效的原因是⼩伙伴没有指定本地feature-2分⽀与远程origin/feature-2分⽀的链接,根据提 ⽰,设置feature-2和origin/feature-2的链接即可:

 现在总算是拉取成功了

⽬前,⼩伙伴的本地代码和远端保持严格⼀致。你和你的⼩伙伴可以继续在不同的分⽀下进⾏协同开 发了。

各⾃功能开发完毕后,不要忘记我们需要将代码合并到master中才算真正意义上的开发完毕。

由于你的⼩伙伴率先开发完毕,于是开始 merge :

1.切换master分支pull一下,保证本地master是最新内容

2.切换至feature-2分支,合并master分支

3.切换至master分支,合并feature-2分支

4.将master分支推送至远程仓库

此时远程仓库的状态:

当你的⼩伙伴将其代码 merge 到 master后,你也完成开发了,也需要进行merge到master 操作,于是你: 

切 换⾄ master 分⽀ , pull ⼀下,保证本地的 master 是最新内容。  合 并前这么做是⼀个好习惯

 切 换⾄ feature-1 分⽀ , 合并 master 分⽀

这 么做是因为如果有冲突,可以在 feature-1 分⽀上进⾏处理,⽽不是在 master 上解决冲突。

这么做是⼀个好习惯

期间可能会遇到下面这个,直接ctrl+o保存,输入文件名,然后ctrl+x退出 

 1 、由于 feature-1 分⽀已经 merge 进来了新内容,为了保证远程分⽀最新,所以最好 push ⼀下。

2 、要 push 的另⼀个原因是因为在实际的开发中, master 的 merge 操作⼀般不是由我们⾃⼰在本地进行

其 他⼈员或某些平台 merge 时,操作的肯定是远程分⽀,所以就要保证远程分⽀的最新。

3 、如果 merge 出现冲突,不要忘记需要 commit 才可以 push!!

切 换⾄ master 分⽀,合并 feature-1 分⽀

 将 master 分⽀推送⾄远端

此时远程仓库的状态:

 此时, feature-1 和 feature-2 分⽀对于我们来说就没⽤了,那么我们可以直接在远程仓库中 将dev分⽀删除掉:

这就是多⼈协作的⼯作模式,⼀旦熟悉了,就⾮常简单。

3.远程分⽀删除后,本地gitbranch-a依然能看到的解决办法

当前我们已经删除了远程的⼏个分⽀,使⽤ git branch -a 命令可以查看所有本地分⽀和远程分 ⽀,但发现很多在远程仓库已经删除的分⽀在本地依然可以看到。例如:

 使⽤命令git remote show origin ,可以查看remote地址,远程分⽀,还有本地分⽀与之相 对应关系等信息。

此时我们可以看到那些远程仓库已经不存在的分⽀,根据提⽰,使⽤git remote prune origin 命令: 

这样就删除了那些远程仓库不存在的分⽀。对于本地仓库的删除,之前的课程已经学过了,⼤家可以 ⾃⾏从操作。

4.企业级开发模型 

4.1.Git的重要性

我们知道,⼀个软件从零开始到最终交付,⼤概包括以下⼏个阶段:规划、编码、构建、测试、发 布、部署和维护。

最初,程序⽐较简单,⼯作量不⼤,程序员⼀个⼈可以完成所有阶段的⼯作。但随着软件产业的⽇益 发展壮⼤,软件的规模也在逐渐变得庞⼤。软件的复杂度不断攀升,⼀个⼈已经hold不住了,就开始 出现了精细化分⼯。

但在传统的IT组织下,开发团队(Dev)和运维团队(Ops)之间诉求不同:

• 开发团队(尤其是敏捷团队)追求变化

• 运维团队追求稳定 双⽅往往存在利益的冲突。

⽐如,精益和敏捷的团队把持续交付作为⽬标,⽽运维团队则为了线上的 稳定⽽强调变更控制。部⻔墙由此建⽴起来,这当然不利于IT价值的最⼤化。

为了弥合开发和运维之间的鸿沟,需要在⽂化、⼯具和实践⽅⾯的系列变⾰⸺DevOps正式登上舞 台。

DevOps(Development和Operations的组合词)是⼀种重视“软件开发⼈员(Dev)”和“IT运维技 术⼈员(Ops)”之间沟通合作的⽂化、运动或惯例。

透过⾃动化“软件交付”和“架构变更”的流 程,来使得构建、测试、发布软件能够更加地快捷、频繁和可靠。在DevOps的软件开发过程包含计 划、编码、构建、测试、预发布、发布、运维、监控,由此可⻅DevOps的强⼤。

讲了这么多,这个故事到底和我们课程的主题Git有什么关系呢?

举⼀个很简单的例⼦就能说明这个问题。⼀个软件的迭代,在我们开发⼈员看来,说⽩了就是对代码 进⾏迭代,那么就需要对代码进⾏管理。

如何管理我们的代码呢,那不就是Git(分布式版本控制系 统)!所以Git对于我们开发⼈员来说其重要性就不⾔⽽喻了。

4.2.系统开发环境

⾔归正传,对于开发⼈员来说,在系统开发过程中最常⽤的⼏个环境必须要了解⼀下:

1. 开发环境:开发环境是程序猿们专⻔⽤于⽇常开发的服务器。为了开发调试⽅便,⼀般打开全部错 误报告和测试⼯具,是最基础的环境。

2. 测试环境:⼀个程序在测试环境⼯作不正常,那么肯定不能把它发布到⽣产机上。该环境是开发环 境到⽣产环境的过渡环境。

3. 预发布环境:该环境是为避免因测试环境和线上环境的差异等带来的缺陷漏测⽽设⽴的⼀套环境。 其配置等基本和⽣产环境⼀致,⽬的是能让我们发正式环境时更有把握!所以预发布环境是你的产 品质量最后⼀道防线,因为下⼀步你的项⽬就要上线了。要注意预发布环境服务器不在线上集成服 务器范围之内,为单独的⼀些机器。

4. ⽣产环境:是指正式提供对外服务的线上环境,例如我们⽬前在移动端或PC端能访问到的APP都是 ⽣产环境。 这⼏个环境也可以说是系统开发的三个重要阶段:开发->测试->上线。

⼀张图总结:

4.3.Git 分⽀设计规范

环境有了概念后,那么对于开发⼈员来说,⼀般会针对不同的环境来设计分⽀,例如:

分支名称适用环境名字
master生产环境主分支
release预发布/测试环境预发布分支
develop开发环境开发主分支
feature本地(需求开发分支)需求开发分支
hotfix本地(紧急修复分支)紧急修复分支

注:以上表格中的分⽀和环境的搭配仅是常⽤的⼀种,可视情况⽽定不同的策略。

master 分支

  • 为主分支,该分支为只读且唯一分支。
  • 用于部署到正式发布环境,一般由合并 release 分支得到。
  • 主分支作为稳定的唯一代码库,任何情况下不允许直接在 master 分支上修改代码。
  • 产品的功能全部实现后,最终在 master 分支对外发布,另外所有在 master 分支的推送应该打标签(tag)做记录,方便追溯。
  • master 分支不可删除

release 分支

  • 为预发布分支,基于本次上线所有的 feature 分支合并到 develop 分支之后,基于 develop 分支创建。
  • 可以部署到测试或预发布集群
  • 命名以 release/ 开头,建议的命名规则: release/version_publishtime。
  • release 分支主要用于提交给测试人员进行功能测试。发布提测阶段,会以 release 分支为基准进行提测。
  • 如果在 release 分支测试出问题,需要回归验证 release 分支代码到 develop 分支看是否存在此问题。
  • release 分支属于临时分支,产品上线后可选删除。

develop 分支

  • 为开发分支,基于 master 分支创建的只读且唯一分支,始终保持最新完成以及 bug 修复后的代码。
  • 可部署到开发环境对应集群
  • 可根据需求大小程度确定是由 feature 分支合并,还是直接在上面开发(非常不建议)

feature 分支

  • feature 分支通常为新功能或新特性开发分支
  • 命名以 develop 分支为基础创建 feature 分支,以 feature/ 开头,建议的命名规则:feature/user_createtime_feature。
  • 新特性或新功能开发完成后,开发人员需合并到 develop 分支。
  • 一旦该需求发布上线,便将其删除。

hotfix 分支

  • hotfix 分支为线上 bug 修复分支或叫补丁分支,主要用于对线上的版本进行 bug 修复。
  • 当线上出现紧急问题需要马上修复时,需要基于 master 分支创建 hotfix 分支。
  • 命名以 hotfix/ 开头,建议的命名规则: hotfix/user_createtime_hotfix。
  • 当问题修复完成后,需要合并到 master 分支和 develop 分支并推送远程。
  • 一旦修复上线,便将其删除。

其实,以上跟⼤家讲解的是企业级常⽤的⼀种Git分⽀设计规范:GitFlow模型。

但要说的是,该模 型并不是适⽤于所有的团队、所有的环境和所有的⽂化。

如果你采⽤了持续交付,你会想要⼀些能够 尽可能简化交付过程的东西。

有些⼈喜欢基于主⼲的开发模式,喜欢使⽤特性标志。

然⽽,从测试的 ⻆度来看,这些反⽽会把他吓⼀跳。

关键在于站在你的团队或项⽬的⻆度思考:这种分⽀模型可以帮助你们解决哪些问题?它会带来哪些 问题?这种模式为哪种开发提供更好的⽀持?你们想要⿎励这种⾏为吗?你选择的分⽀模型最终都是 比特就业课 为了让⼈们更容易地进⾏软件协作开发。

因此,分⽀模型需要考虑到使⽤者的需求,⽽不是盲⽬听信 某些所谓的“成功的分⽀模型”。

所以对于不同公司,规范是会有些许差异,但万变不离其宗,是为了效率与稳定。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/77163.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大众点评 mtgsig1.2 分析 mtgsig

声明 本文章中所有内容仅供学习交流使用,不用于其他任何目的,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关! 逆向过程 部分代码 params[yodaRead…

(三) Trae 调试C++ 基本概念

调试C基本概念 一、调试基础概念1.1 调试信息格式1.2 DWARF格式和PDB格式生成(图解)1.3.典型工具链和调试信息 二、各工具链深度解析1. Clang 与 G 的 DWARF 差异 三 调试工具3.1 调试工具3.2 调试插件(Trae) 一、调试基础概念 1.1 调试信息格式 格式类型适用系统存在形式DWA…

Flink部署与应用——部署方式介绍

引入 我们通过Flink相关论文的介绍,对于Flink已经有了初步理解,这里简单的梳理一下Flink常见的部署方式。 Flink 的部署方式 StandAlone模式 介绍 StandAlone模式是Flink框架自带的分布式部署模式,不依赖其他的资源调度框架&#xff0c…

【智慧城市】新中地GIS开发实训:基于 Vue 框架的武汉智慧旅游系统

首页 地球自转页 控制台页 景点信息页 天气预报页 路线规划页 查询页 AI问答页 热力图页 测量页 来源: 【智慧城市】新中地GIS开发实训:优秀学生项目作品(58)基于 Vue 框架的武汉智慧旅游系统

C++入侵检测与网络攻防之网络嗅探以及ARP攻击

目录 1.tcpdump基本使用 2.tcpdump条件过滤 3.wireshark介绍 4.wireshark的介绍 5.tcp握手挥手分析 6.telnet服务的介绍和部署 7.复习 8.telnet服务的报文嗅探 9.网络嗅探基础 10.arp协议的解析 11.arp攻击原理以及试验环境 12.arp实验以及防御方式 1.tcpdump基本使…

【数据可视化-28】2017-2025 年每月产品零售价数据可视化分析

🧑 博主简介:曾任某智慧城市类企业算法总监,目前在美国市场的物流公司从事高级算法工程师一职,深耕人工智能领域,精通python数据挖掘、可视化、机器学习等,发表过AI相关的专利并多次在AI类比赛中获奖。CSDN…

系统与网络安全------弹性交换网络(3)

资料整理于网络资料、书本资料、AI,仅供个人学习参考。 STP协议 环路的危害 单点故障 PC之间的互通链路仅仅存在1个 任何一条链路出现问题,PC之间都会无法通信 解决办法 提高网络可靠性 增加冗余/备份链路 增加备份链路后交换网络上产生二层环路 …

广州 3D 展厅开启企业展示新时代​

为了突破传统展厅的局限,满足企业日益增长的展示需求,3D 展厅应运而生。3D 展厅是利用虚拟现实(VR)、增强现实(AR)和三维建模等先进技术,构建出的一个高度逼真的数字化展示空间 。它打破了传统展…

C++初登门槛

多态 一、概念 多态是指不同对象对同一消息产生不同响应的行为。例如,蓝牙、4G、Wi-Fi 对“发送数据”指令有不同的具体实现。 二、核心理解 本质:通过基类指针或引用操作子类对象,实现运行时动态绑定。 表现形式: 接口统一&a…

文件上传详细版

文件上传造成因素: 文件路径过滤不严格,可能通过遍历目录来获得文件,也可能通过文件上传对重要文件案进行覆盖,还可能对文件拓展名和文件类型过滤不严格,可以上传任意文件到web公开目录上,进而远程控制服务…

华为网路设备学习-19 IGP路由专题-路由策略

一、 二、 注意: 当该节点匹配模式为permit下时,参考if else 当该节点匹配模式为deny下时: 1、该节点中的apply子语句不会执行。 2、如果满足所有判断(if-match)条件时,拒绝该节点并跳出(即不…

智能指针之设计模式4

前面的文章介绍了使用工厂模式来封装智能指针对象的创建过程&#xff0c;下面介绍一下工厂类 enable_shared_from_this的实现方案。 4、模板方法模式 在前面的文章分析过&#xff0c;enable_shared_from_this<T>类是一个工厂基类&#xff0c;提供的工厂方法是shared_f…

【Nova UI】十、打造组件库第一个组件-图标组件(下):从.svg 到 SVG Vue 组件的高效蜕变✨

序言 在组件库开发的精彩旅程中&#x1f680;&#xff0c;我们已经成功打造并完善了图标组件体系&#xff0c;赋予其强大的功能和丰富的表现力&#x1f389;。然而&#xff0c;随着业务版图的不断扩张&#x1f310;&#xff0c;手动逐个编写 SVG Vue 组件的传统方式&#xff0…

Golang | 倒排索引

文章目录 倒排索引的设计倒排索引v0版实现 倒排索引的设计 通用搜索引擎 v.s. 垂直搜索引擎&#xff1a; 通用搜索引擎&#xff1a;什么都可以搜索&#xff0c;更加智能化垂直搜索引擎&#xff1a;只能搜自家数据库里面的内容&#xff0c;一般都带着搜索条件&#xff0c;搜索一…

Windows 10 上运行 Ollama 时遇到 llama runner process has terminated: exit status 2

在 Windows 10 上运行 Ollama 时遇到 llama runner process has terminated: exit status 2 错误&#xff0c;可能是由多种原因引起的。以下是逐步解决方案&#xff1a; 1. 检查 Ollama 服务状态 按 Win R 输入 services.msc&#xff0c;找到 Ollama 服务&#xff0c;确保其状…

PCI 总线学习笔记(五)

PCI 总线学习系列&#xff0c;参考自 技术大牛博客&#xff1a; PCIe 扫盲系列博文连载目录篇 书籍&#xff1a;王齐老师的《PCI Express 体系结构导读》 下面的文章中加入了自己的一些理解和实际使用中遇到的一些场景&#xff0c;供日后查询和回忆使用 PCI 总线定义了两类配置…

Spring Cloud Alibaba VS Spring Cloud

​​Spring Cloud Alibaba 与 Spring Cloud 组件对比​ ​​服务发现与注册中心​ 功能​​​Spring Cloud​​​Spring Cloud Alibaba​对比说明​​核心组件​EurekaNacosNacos 支持动态配置管理、健康检查更灵活&#xff0c;且提供 DNS 服务发现能力。​​​​健康检查​​…

Java—— 常见API介绍 第五期

JDK8以后新增的时间相关类 Date类ZoneId&#xff1a;时区Instant&#xff1a;时间戳ZoneDateTime&#xff1a;带时区的时间 日期格式化类 SimpleDateFormat DateTimeFormatter&#xff1a;用于时间的格式化和解析 日历类 Calendar LocalDate&#xff1a;年、月、日LocalTime…

Java与Kotlin在Android开发中的全面对比分析

趋势很重要 语言发展背景与现状 Android操作系统自2008年正式发布以来&#xff0c;Java长期作为其主要的开发语言。这种选择源于Java语言的跨平台特性、成熟的生态系统以及广泛开发者基础。然而&#xff0c;随着移动开发需求的快速演变&#xff0c;Java在Android开发中逐渐暴…

第一部分:git基本操作

目录 1、git初识 1.1、存在的问题 1.2、版本控制器 1.3、git安装 1.3.1、CentOS平台 1.3.2、ubuntu平台 2、git基本操作 2.1、创建仓库 2.2、配置git 3、工作区、暂存区、版本库 4、基本操作 4.1、场景一 4.2、场景二 4.3、修改文件 5、版本回退 6、撤销修改 …