当前位置: 首页 > news >正文

什么是git?

前言

Git 是一款免费、开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。是的,我对git的介绍就一条,想看简介的可以去百度一下😘😘😘

为什么要用git?

OK,想象一下,我是一名作家,现在我要开始写一本小说了,我想要将我的小说每天都发布到“github小说网”上,一日两更。我想要一个工具,它要具备的功能如下:

  1. 将我每天写的小说章节发布
  2. 我发现昨天写的章节有问题,它可以帮我撤回
  3. 一周后,我又想找到上周我撤回的章节,它能帮我找到
  4. 我想写一个“漫威宇宙的系列”,我需要雇人和我一起写,它可以帮我们同步进度
  5. 我想要查看每个人写了什么,什么时候写的
  6. ...

想要的有点多了,我知道很难满足,但是git就能满足我的一切需求...

写小说

我进厂写小说了,厂长说:你先下一个git。那我必须得下一个git

下载git

直接跑到这个git官网www.git-scm.com/downloads ,可以搜个教程跟着安装,这里就不细说了

基本配置

把git下载下来了,那我不得登录一下,免得到时候小说写的有问题都不知道是谁写的,为了不背锅!

$ git config --global user.name $ git config --global user.email

参与写小说

来到“github小说网”,要将之前的章节全部拷贝到你的电脑上,才能开始续写

image.png

使用git clone 命令来完成

$ git clone https://github.com/vuejs/vue.git

这样就将代码克隆到你的本地了

小说版本

我们的小说每天都在迭代更新,master分支就是我们的主分支,也就是目前发布的最新的小说内容

image.png

每当我们向master提交代码,master都会向前移动一步。

想象一个场景,有十个人都在写同一本小说,那么十个人都同时向master提供代码,会发生什么事情?

  • 并行开发受限:没有分支意味着无法支持并行开发,因为每个人都只能基于master进行工作,这可能会导致团队成员之间的代码冲突。

  • 代码管理困难:由于所有更改都直接应用于master,代码管理会变得混乱,很难跟踪谁提交了哪些更改,以及何时进行了更改。

  • 风险高:由于没有分支,每次更改都直接影响master,这可能增加了引入错误或破坏现有功能的风险。

  • 难以撤销更改:没有分支意味着难以进行实验性更改或回滚到先前的版本,因为没有办法轻松地隔离或恢复更改。

所以我们每个人都需要创建自己的分支,最后再将自己的分支与master合并

当我们创建了新的分支,比如叫 myBranch ,git 就会新建一个指针叫 myBranch,指向 master 相同的提交,在把 HEAD 指向 myBranch,就表示当前分支在 myBranch 上。

image.png

从现在开始,对工作区的修改和提交都是针对 myBranch 分支了,如果我们修改后再提交一次,myBranch指针就会向前移动一步,而master指针不变,当我们将myBranch开发完毕以后,再将它与master合并

  • 查看当前分支

$ git branch

  • 创建分支

$ git checkout -b 分支名

git checkout 命令加上-b参数,表示创建分支并切换,它相当于下面的两个命令:

$ git branch dev //创建分支 $ git checkout dev //切换到创建的分支

提交

在上面,我们已经创建好了一个分支myBranch,我们一天要写两章小说,当我每写完一章以后,我要将它先存入暂存区,当一天的工作完毕以后,统一将暂存区的代码提交到本地仓库,最后再上传到远程仓库,并且合并

  • 上传暂存区

$ git add . //将修改的文件全部上传 $ git add xxx //将xxx文件上传

  • 提交到本地仓库

git commit -m '提交代码的描述'

  • 提交到远程仓库的对应分支

$ git push origin xxx //xxx是对应分支名

  • 合并分支

$ git checkout master //首先切换分支到master $ git merge mybranch

  • 删除分支

当你合并完分支以后,mybranch分支就可以删除了

$ git branch -d mybranch

解决冲突😘😘

Git 合并分支产生冲突的原因通常是因为两个或多个分支上的相同部分有了不同的修改。这可能是因为以下几个原因:

  1. 并行开发:团队中的不同成员在不同的分支上同时开发功能或修复 bug。如果他们修改了相同的文件或代码行,就会导致合并冲突。
  2. 分支基于旧版本:当从一个旧的提交创建分支,然后在原始分支上进行了更改时,可能会导致冲突。这是因为在创建分支后,原始分支可能已经有了新的提交。
  3. 重命名或移动文件:如果一个分支重命名或移动了一个文件,而另一个分支对同一文件进行了修改,就会导致冲突。
  4. 合并冲突的解决方法不同:在合并分支时,有时会使用不同的合并策略或解决方法,这可能会导致冲突。
  5. 历史分叉:如果两个分支的历史分叉很远,可能会存在较大的差异,从而导致合并时出现冲突。

于是我们需要将冲突解决再重新合并分支,解决冲突也就是查看文件新增了哪些代码,你需要保留哪些代码,把不需要的删去就可以了...

我们还需养成一个好习惯,就是在开发之前先git pull 一下,更新一下自己本地的代码确保版本是最新的。

添砖加瓦

如果我已经使用git commit -m 'xxx'将代码提交到了本地仓库,但是我后续还想向这个提交中添加文件,那我该怎么办呢?

  1. 首先将你想添加到文件使用git add xxx加入暂存区
  2. 然后运行以下命令:

$ git commit --amend

这将会打开一个编辑器,让你编辑上一次提交的提交信息。如果你只是想要添加文件而不改变提交信息,你可以直接保存并关闭编辑器。

  1. Git 将会创建一个新的提交,其中包含之前的提交内容以及你刚刚添加的文件。

您撤回了一次push

代码推送到远程仓库的master上以后,我发现有bug,挨批是不可避免了,批完还得接着解决...

  1. 撤销最新的提交并保留更改

$ git reset HEAD^

这会将最新的提交从 master 分支中撤销,但会保留更改在工作目录中。你可以修改这些更改,然后重新提交。

  1. 撤销最新的提交并丢弃更改

$ git reset --hard HEAD^

这会完全撤销最新的提交,并丢弃相关的更改。慎用,因为这将永久丢失你的更改

  1. 创建新的修复提交

如果你不想删除最新的提交,而是创建一个新的提交来修复问题,可以进行如下操作:

  • 在 master 分支上创建一个新的分支来进行修复

$ git checkout -b fix-branch master

  • 在新分支上进行修改,修复代码中的问题。
  • 提交并推送修复:

$ git add . $ git commit -m "Fixing the issue" $ git push origin fix-branch

仅供参考!!!

相关文章:

  • 弗洛伊德算法——C语言
  • 可视化程序设计OJ技术研究
  • 【Starrocks docker-compose部署】
  • C++ 56 之 菱形继承
  • git-本地项目与git连接及上传【快速教程】
  • PyTorch计算机视觉入门:测试模型与评估,对单帧图片进行推理
  • 【SpringBoot】SpringBoot:构建实时聊天应用
  • Java数据结构与算法(完全背包)
  • Qt 实战(4)信号与槽 | 4.3、信号连接信号
  • 0118__C语言——float.h文件
  • 使用Spyder进行Python编程和代码调试
  • Qt项目天气预报(1) - ui界面搭建
  • 集成学习方法:Bagging与Boosting的应用与优势
  • C++中的结构体——结构体中const的使用场景
  • express入门03增删改查
  • [rust! #004] [译] Rust 的内置 Traits, 使用场景, 方式, 和原因
  • 【笔记】你不知道的JS读书笔记——Promise
  • Angular 响应式表单 基础例子
  • Electron入门介绍
  • Gradle 5.0 正式版发布
  • Material Design
  • node和express搭建代理服务器(源码)
  • react-native 安卓真机环境搭建
  • React系列之 Redux 架构模式
  • SpringCloud集成分布式事务LCN (一)
  • Web设计流程优化:网页效果图设计新思路
  • 从输入URL到页面加载发生了什么
  • 翻译 | 老司机带你秒懂内存管理 - 第一部(共三部)
  • 工程优化暨babel升级小记
  • 区块链将重新定义世界
  • 什么软件可以剪辑音乐?
  • 一个6年java程序员的工作感悟,写给还在迷茫的你
  • 做一名精致的JavaScripter 01:JavaScript简介
  • ​插件化DPI在商用WIFI中的价值
  • ​虚拟化系列介绍(十)
  • (博弈 sg入门)kiki's game -- hdu -- 2147
  • (附源码)springboot码头作业管理系统 毕业设计 341654
  • (转)C#调用WebService 基础
  • (转)EXC_BREAKPOINT僵尸错误
  • . Flume面试题
  • ./indexer: error while loading shared libraries: libmysqlclient.so.18: cannot open shared object fil
  • .Net 基于.Net8开发的一个Asp.Net Core Webapi小型易用框架
  • .net 提取注释生成API文档 帮助文档
  • .NET/C# 编译期间能确定的相同字符串,在运行期间是相同的实例
  • .NET/C# 中设置当发生某个特定异常时进入断点(不借助 Visual Studio 的纯代码实现)
  • .NET版Word处理控件Aspose.words功能演示:在ASP.NET MVC中创建MS Word编辑器
  • .NET应用架构设计:原则、模式与实践 目录预览
  • @RequestMapping处理请求异常
  • @vue/cli 3.x+引入jQuery
  • @我的前任是个极品 微博分析
  • [ 数据结构 - C++]红黑树RBTree
  • []我的函数库
  • [2016.7 Day.4] T1 游戏 [正解:二分图 偏解:奇葩贪心+模拟?(不知如何称呼不过居然比std还快)]
  • [20171113]修改表结构删除列相关问题4.txt
  • [Android View] 可绘制形状 (Shape Xml)