使用 Git 分支:轻松管理不同版本和应对紧急情况的最佳实践

使用 Git 分支

在 Git 中,分支是主仓库的新/独立版本。

假设你有一个大型项目,需要对其进行设计更新。

没有使用 Git 时:

  • 复制所有相关文件以避免影响实时版本
  • 开始进行设计工作,并发现代码依赖于其他文件中的代码,这些文件也需要更改!
  • 复制相关文件,确保每个文件依赖项引用正确的文件名
  • 紧急情况!项目的其他地方存在无关的错误,需要尽快修复!
  • 保存所有文件,记录你正在工作的副本的名称
  • 处理无关的错误并更新代码以修复它
  • 返回到设计工作,完成工作
  • 复制代码或重命名文件,以使更新后的设计出现在实时版本中

(两周后,你意识到未修复无关的错误,因为在修复之前你复制了文件)

使用 Git 时:

  • 使用名为 "new-design" 的新分支,直接编辑代码,而不影响主分支
  • 紧急情况!项目的其他地方存在无关的错误,需要尽快修复!
  • 从主项目创建名为 "small-error-fix" 的新分支
  • 修复无关的错误并将 "small-error-fix" 分支与主分支合并
  • 返回到 "new-design" 分支,完成工作
  • 合并 "new-design" 分支与主分支(提醒你正在缺少的小错误修复)

分支允许你在项目的不同部分上工作,而不影响主分支。

当工作完成后,可以将分支与主项目合并。

你甚至可以在不同分支之间切换,同时在不同项目上工作,而彼此不会互相干扰。

在 Git 中,分支非常轻量且快速!

创建新 Git 分支

让我们向我们的 index.html 页面添加一些新功能。

我们在本地仓库中工作,不希望干扰或可能破坏主项目。

所以我们创建一个新分支:

git branch hello-world-images

现在我们创建了一个名为 "hello-world-images" 的新分支。

让我们确认我们已经创建了一个新分支:

git branch
hello-world-images
* master

我们可以看到新分支的名称为 "hello-world-images",但在 master 旁边的 * 指定我们当前在该分支上。

checkout 是用于检出分支的命令,将我们从当前分支移动到命令末尾指定的分支:

git checkout hello-world-images

现在我们已将当前工作区从 master 分支移动到新分支。

打开你最喜欢的编辑器并进行一些更改。

在此示例中,我们在工作目录中添加了一个图像(img_hello_world.jpg)和 index.html 文件的一行代码:

<!DOCTYPE html>
<html>
<head>
<title>Hello World!</title>
<link rel="stylesheet" href="bluestyle.css">
</head>
<body> <h1>Hello world!</h1>
<div><img src="img_hello_world.jpg" alt="Hello World from Space"
style="width:100%;max-width:960px"></div>
<p>This is the first file in my new Git Repo.</p>
<p>A new line in our file!</p> </body>
</html>

我们对一个文件进行了更改,并在工作目录中添加了一个新文件(与主分支相同的目录)。

现在检查当前分支的状态:

git status

在 hello-world-images 分支上,有文件更改,但该文件未准备好提交,img_hello_world.jpg 不在跟踪文件中。

因此,我们需要将这两个文件都添加到该分支的暂存区中:

git add --all

使用 --all 而不是单独的文件名将所有已更改的文件(新的、修改的和已删除的)放入暂存区。

检查分支的状态:

git status

在 hello-world-images 分支上,有文件更改,但未准备好提交。所以我们将这些更改提交到该分支:

git commit -m "Added image to Hello World"

现在我们有一个不同于 master 分支的新分支。

注意:在 checkout 命令上使用 -b 选项会创建一个新分支,并移动到该分支,如果该分支不存在的话。

切换分支

现在让我们看看工作在不同分支上有多么快速和容易,以及它是如何有效地工作的。

我们当前位于 hello-world-images 分支。我们向此分支添加了一个图像,所以让我们列出当前目录中的文件:

ls

我们可以看到新文件 img_hello_world.jpg,如果打开 html 文件,可以看到代码已经发生了变化。一切都按计划进行。

现在,让我们看看当我们切换到 master 分支时会发生什么

git checkout master

不再存在 img_hello_world.jpg!如果打开 html 文件,可以看到代码已经恢复到修改之前的状态。

看看工作在不同分支上有多么容易?以及它是如何允许你在不同的任务上工作的?

###

紧急分支

现在假设我们还没有完成 hello-world-images,但我们需要在 master 上修复一个错误。

我不想直接干预 master,也不想干扰 hello-world-images,因为它还没有完成。

所以我们创建一个新分支来处理紧急情况:

git checkout -b emergency-fix

现在我们已经从 master 创建了一个新分支,并切换到它。我们可以安全地修复错误,而不会干扰其他分支。

让我们修复我们想象中的错误:

<!DOCTYPE html>
<html>
<head>
<title>Hello World!</title>
<link rel="stylesheet href="bluestyle.css">
</head>
<body> <h1>Hello world!</h1>
<p>This is the first file in my new Git Repo.</p>
<p>This line is here to show how merging works.</p> </body>
</html>

我们在该文件中进行了更改,现在需要将这些更改传输到 master 分支。

检查分支的状态:

git status

在 emergency-fix 分支上,有文件更改,但未准备好提交,所以我们需要将该文件暂存,然后提交:

git add index.html
git commit -m "updated index.html with emergency fix"

现在,我们已经为 master 分支准备好一个修复。需要合并这两个分支。

最后

为了方便其他设备和平台的小伙伴观看往期文章:

微信公众号搜索:Let us Coding,关注后即可获取最新文章推送

看完如果觉得有帮助,欢迎 点赞、收藏、关注

Git 分支管理:优化版本控制与应急处理的关键策略的更多相关文章

  1. 团队项目的Git分支管理规范

    原文地址: http://blog.jboost.cn/2019/06/17/git-branch.html 许多公司的开发团队都采用Git来做代码版本控制.如何有效地协同开发人员之间,以及开发.测试 ...

  2. git分支管理与冲突解决(转载)

    Git 分支管理和冲突解决 原文:http://www.cnblogs.com/mengdd/p/3585038.html 创建分支 git branch 没有参数,显示本地版本库中所有的本地分支名称 ...

  3. GIT分支管理模型

    GIT分支管理模型 link: git-branching-model 主分支(Main branches) 项目两个常驻分支: master 主干分支(锁定),仅用于发布新版本,平时不能在上面干活, ...

  4. Git 分支管理是一门艺术

    转载: Git 分支管理是一门艺术 1 要确保:团队成员从主分支(master)获得的都是处于可发布状态的代码,而从开发分支(develop)应该总能够获得最新开发进展的代码. 2 "辅助分 ...

  5. Git 分支管理详解

    大纲: 1.前言 2.创建分支 3.切换分支 4.合并分支(快速合并) 5.删除分支 6.分支合并冲突 7.合并分支(普通合并) 8.分支管理策略 9.团队多人开发协作 10.总结 注,测试机 Cen ...

  6. Git分支管理[三]

    标签(linux): git 笔者Q:972581034 交流群:605799367.有任何疑问可与笔者或加群交流 git分支管理命令 git branch #创建分支 git branch -v # ...

  7. Git—分支管理

    Git—分支管理 分支学习:branch称为分支,默认仅有一个名为master的分支.一般开发新功能流程为:开发新功能时会在分支dev上进行,开发完毕后再合并到master分支. branch相关常用 ...

  8. [转载]理解 Git 分支管理最佳实践

    原文 理解 Git 分支管理最佳实践 Git 分支有哪些 在进行分支管理讲解之前,我们先来对分支进行一个简单的分类,并明确每一类分支的用途. 分支分类 根据生命周期区分 主分支:master,deve ...

  9. 02: git分支管理

    目录:GIT其他篇 01: git & github 02: git分支管理 目录: 1.1 Git常用命令 1.2 主要分支(保护分支) 1.3 特性分支:feature (开发分支合并到d ...

  10. git 分支管理——多人协作

    git 分支管理--多人协作 一般一个项目有一个master主分支,还有一个develop开发分支.主要是在develop分支上协作开发,然后merge合并到master主分支上. 当从远程仓库克隆时 ...

随机推荐

  1. FPGA MCS文件为什么比BIN文件烧录快

    原因 Xilinx FPGA固化FPGA程序到FLASH时,可以选择使用MCS或者BIN格式,BIN是纯二进制文件,MCS是ASCII格式的文本文件. MCS是Intel早期为MCS系列 II ISI ...

  2. 【Azure 云服务】查看Azure云服务在中国区域的VM型号大小列表(型号编码,定价层,以及CPU, Memory等)

    问题描述 如何查看创建 Azure Cloud Service 服务时,可以选择的VM型号吗? 问题解答 根据官网参考,可以通过PowerShell脚本 Get-AzComputeResourceSk ...

  3. ui转py文件

    ui文件转py文件并且使用 简单做一个笔记,以后忘了回来看看 转换 在QT Designer中创建完ui文件后,回到pycharm中,右键点击ui文件,选择pyuic 完成后获得了和ui文件同名的py ...

  4. Java abstract 小测试

    1 package com.bytezreo.abstractTest; 2 3 /** 4 * 5 * @Description abstract 小测试 6 * @author Bytezero· ...

  5. pycharm/Intellij idea双击打不开,没有反应,下列方法亲测有用!

    第一种方法: 看看你的微软C++运行库是不是误删了.....我就这么干过...以前有个软件捆绑这个 安装了 结果我后来给删了 ,导致我pycharm 和intellij idea全都打不开 !!!各位 ...

  6. 精贴总结 - Serverless 的承诺都兑现了吗

    原文 - Serverless 的承诺都兑现了吗? 一.个人看法 serverless根本目的是降低成本,所以baas是核心 冷启动是关键的技术难点,也限制了faas的作用域 供应商锁定是个坑,标准化 ...

  7. iview table 左侧固定列 右侧固定列 滚动的时候 表格错位 解决方案

    iview table 左侧固定列 右侧固定列 滚动的时候 表格错位 解决方案 iview table 滚动条位置重置 https://www.jianshu.com/p/32fcd50489ff

  8. 加密与安全:非对称加密算法 RSA 1024 公钥、秘钥、明文和密文长度

    RSA 1024 是指公钥及私钥分别是 1024bit,也就是 1024/8 = 128Bytes. RSA 原理 RSA 算法密钥长度的选择是安全性和程序性能平衡的结果,密钥长度越长,安全性越好,加 ...

  9. 海量数据去重的Hash与BloomFilter

    今天我们谈论一下散列表,我之前的两个博文写的都是关于平衡二叉树的 平衡二叉树 增删改查时间复杂度为log2n 平衡的目的是增删改以后,保证下次搜索能稳定排除一半的数据: 总结:通过比较保证有序,通过每 ...

  10. [置顶] 彻底停止运行线程池ThreadPoolExecutor

    最近系统开发时遇到这样一个需求: 该功能执行时间很久,如果运行过程出现错误,也无法将其停止,必须眼睁睁的看着它浪费很久时间,除非停止服务器. 于是,我就想着如何给该功能加上一个"停止&quo ...