git基础指令总结持续更新之git分支简介和基本操作,解决合并和冲突,回退和rebase(变基),分支命名和分支管理,学习笔记分享

git 分支简介和基本操作

Git 分支是 Git 的核心特性之一,它允许开发者在不同的开发线上工作,而不会影响主代码库。以下是 Git 分支的简介和一些基本操作:

分支的概念:

分支是 Git 中的一个独立开发线。创建分支时,Git 会记录当前的状态并创建一个新的开发线。分支允许开发者进行实验或修复错误,而不会影响主分支(通常是 master 或 main)。

分支的类型:

  • 本地分支:仅在本地仓库中存在,未推送到远程仓库。
  • 远程分支:由远程仓库推送更新而来,通常以 origin/ 前缀表示。
  • 跟踪分支:与远程分支相关联的本地分支,可以自动与远程分支进行合并。

分支的优点:

  • 允许同时进行多个任务或修复。
  • 便于代码审查和合并。
  • 可以安全地进行实验性开发。

基本操作

创建分支:

git branch <branch-name>:创建一个新分支。
git checkout -b <branch-name>:创建新分支并切换到该分支。

切换分支:

git checkout <branch-name> 或者 git switch <branch-name>:切换到指定分支。

查看分支:

git branch:列出所有本地分支。
git branch -a:列出所有本地和远程分支。

合并分支:

git merge <branch-name>:将指定分支的更改合并到当前分支。

删除分支:

git branch -d <branch-name>:删除本地分支(已合并)。

git branch -D <branch-name>:删除未合并分支

git push <remote-name> :<branch-name>:删除远程分支。

推送分支到远程仓库:

git push <remote-name> <branch-name>:将本地分支推送到远程仓库。

拉取远程分支更新:

git pull:拉取远程分支的最新更改并自动合并到当前分支。

设置跟踪分支:

git branch --set-upstream-to=<remote>/<branch-name>:设置当前分支的上游分支。

查看分支合并图:

git log --graph --decorate --oneline --all:以图形方式显示分支的合并历史。

使用分支可以提高开发效率,允许多个开发者同时在不同功能或修复上工作,最终通过合并将更改集成到一起。正确使用分支是 Git 工作流程的关键部分。

解决合并和冲突

当合并时出现冲突,Git 会停止合并并让开发者手动解决冲突。解决后,使用 git add 将解决后的文件暂存,然后 git commit 提交更改。

总结:
两个分支未修改同一个文件的同一处位置:git自动合并
两个分支修改了同一个文件的同一处位置:产生冲突

解决方案:
1.手工修改冲突文件,合并冲突内容
2.添加至暂存区 git add file
3.提交修改 git commit -m "message"

中止合并:当不想继续执行合并操作时可以使用下面的命令来中止合并过程。git merge --abort

回退和rebase(变基)

在 Git 中,回退(Revert)和变基(Rebase)是两种不同的操作,它们都可以用来修改或改进提交历史,但它们的目的和工作方式有所不同。

Git 回退(Revert)

定义:回退是一个安全的操作,用来撤销一个或多个已经存在的提交。它会创建一个新的提交,这个提交是被撤销提交的逆操作。这意味着回退不会改变历史,而是在历史中添加一个新的提交来“反做”之前的更改。

使用场景:

  • 当你想要撤销一个已经合并到主分支的提交,但这个提交可能已经被其他分支或开发者所依赖。
  • 当你想要撤销一个错误的提交,但不想重新编写历史。

命令:
git revert <commit-hash>:撤销单个提交。
git revert --no-commit <commit-hash>:执行变更但不立即提交,允许进一步修改。

特点:

  • 回退操作是可逆的,即你可以再次回退一个回退操作。
  • 它不会改变历史,因此对于共享分支来说是一个安全的选择。

Git 变基(Rebase)

定义:变基是一个更激进的操作,它将一系列的提交从一个分支上摘下来,然后应用到另一个分支上。这可以用来整合来自不同分支的更改,或者清理提交历史。

使用场景:

  • 当你想要更新你的分支以包含主分支的最新更改,同时保持你的提交独立。
  • 当你想要清理或重新排序提交,例如在提交被推送之前。

命令:
git rebase <base-branch>:将当前分支的提交变基到 。

特点:

  • 变基可能会引入合并冲突,需要手动解决。
  • 它可以改变历史,因此在已经共享的分支上使用时需要谨慎。
  • 变基可以是交互式的,允许你编辑、合并或删除提交。

总结

回退是一个安全的操作,用于撤销已经发生的更改,而不会改变历史。

变基是一个更灵活的操作,可以用来整合更改或清理提交历史,但它可能会改变历史,因此在团队协作中使用时需要小心。

选择使用回退还是变基,取决于你的具体需求和团队的工作流程。在团队中,通常建议使用回退来撤销已经合并的更改,而使用变基来更新和清理尚未合并的分支。

分支命名和分支管理

分支命名规范

推荐使用带有意义的描述性名称来命名分支:

  • 使用有意义的名称,确保分支名称能够描述分支的目的,例如 feature/login-page 或 bugfix/issue-123。
    避免使用主分支名称:

  • 不要使用 master 或 main 作为其他分支的名称,以避免混淆。
    使用小写字母:

  • 分支名称通常使用小写字母,避免使用大写字母。
    使用连字符或下划线:

  • 使用连字符(-)或下划线(_)来分隔单词,例如 user-profile 或 user_profile。
    避免使用特殊字符:

  • 不要在分支名称中使用空格或特殊字符,这可能会导致命令行问题。
    分支类型:

根据分支的用途,可以有不同的命名约定。例如:

feature/:新功能开发。
bugfix/
:修复错误。
release/:准备发布的版本。
hotfix/
:紧急修复。
版本号:

对于发布分支,可以在名称中包含版本号,例如 release/1.2.0

分支管理

  • 创建分支:
    在创建新分支之前,确保你的本地仓库是最新的,通过 git pull 获取最新更改。

  • 定期拉取更新:
    在分支开发过程中,定期拉取远程分支的更新,通过 git pull 或 git fetch 避免长时间未同步。

  • 合并还是变基:
    决定是使用 git merge 来合并更改,还是使用 git rebase 来整合更改并保持线性历史。

  • 代码审查:
    在合并到主分支之前,确保代码经过了审查,可以使用 Pull Request 进行代码审查。

  • 删除分支:
    一旦分支的目的已经完成并且合并到了主分支,使用 git branch -d 删除本地分支,使用 git push --delete 删除远程分支。

  • 避免在主分支上直接开发:
    避免在 master 或 main 分支上直接进行开发,所有的开发工作都应该在分支上完成。

  • 使用分支策略:
    采用分支策略,如 Git Flow 或 GitHub Flow,以标准化分支的创建、合并和管理流程。

  • 保持分支简洁:
    尽量保持分支的生命周期短且目的单一,避免一个分支用于多个不相关的功能。

  • 沟通协作:
    在团队中明确沟通分支的使用和合并策略,确保所有成员都遵循相同的工作流程。

  • 分支保护规则:
    对于重要的分支(如 master 或 main),可以设置保护规则,要求 Pull Request 必须经过审查和测试。

定期合并已经成功验证的分支,及时删除已经合并的分支保持合适的分支数量,为分支设置合适的管理权限。

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

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

相关文章

rtt设备驱动框架学习——内核对象基类object

内核对象基类object 这个基类是内核所有对象的基类 在rt-thread/include/rtdef.h文件里有对内核对象基类object的定义 /*** Base structure of Kernel object*/ struct rt_object {char name[RT_NAME_MAX]; /**< name of kernel object */rt…

清新简约之美,开源个人博客:Jekyll Theme Chirpy

Jekyll Theme Chirpy&#xff1a;简约不简单&#xff0c;Chirpy 让你的博客焕发新意- 精选真开源&#xff0c;释放新价值。 概览 Jekyll Theme Chirpy 是为Jekyll静态网站生成器设计的现代主题&#xff0c;以其清新、简约的设计风格和用户友好的交互体验受到开发者和博客作者的…

为企业知识库选模型?全球AI大模型知识库RAG场景基准测试排名

大语言模型常见基准测试 大家对于AI模型理解和推理能力的的基准测试一定非常熟悉了&#xff0c;比如MMLU&#xff08;大规模多任务语言理解&#xff09;、GPQA&#xff08;研究生级别知识问答&#xff09;、GSMSK&#xff08;研究生数学知识考察&#xff09;、MATH&#xff08…

Zabbix监控软件

目录 一、什么是Zabbix 二、zabbix监控原理 三、zabbix 安装步骤 一、什么是Zabbix ●zabbix 是一个基于 Web 界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案。 ●zabbix 能监视各种网络参数&#xff0c;保证服务器系统的安全运营&#xff1b;并提供灵活的…

python读取写入txt文本文件

读取 txt 文件 def read_txt_file(file_path):"""读取文本文件的内容:param file_path: 文本文件的路径:return: 文件内容"""try:with open(file_path, r, encodingutf-8) as file:content file.read()return contentexcept FileNotFoundError…

Swagger的原理及应用详解(十)

本系列文章简介&#xff1a; 在当今快速发展的软件开发领域&#xff0c;特别是随着微服务架构和前后端分离开发模式的普及&#xff0c;API&#xff08;Application Programming Interface&#xff0c;应用程序编程接口&#xff09;的设计与管理变得愈发重要。一个清晰、准确且易…

【多线程】进程与线程

&#x1f3c0;&#x1f3c0;&#x1f3c0;来都来了&#xff0c;不妨点个关注&#xff01; &#x1f3a7;&#x1f3a7;&#x1f3a7;博客主页&#xff1a;欢迎各位大佬! 文章目录 1. 操作系统1.1 什么是操作系统1.2 操作系统主要的功能 2. 进程2.1 什么是进程2.2 通过PCB描述一…

jEasyUI 创建菜单按钮

jEasyUI 创建菜单按钮 jEasyUI(jQuery EasyUI)是一个基于jQuery的用户界面插件集合,它为用户提供了一系列的UI组件,如菜单、按钮、表格等,以简化Web页面的开发过程。在本文中,我们将重点介绍如何使用jEasyUI创建菜单按钮。 1. 环境准备 在开始之前,请确保您的开发环境…

使用Python绘制甘特图

使用Python绘制甘特图 甘特图效果代码 甘特图 甘特图是一种项目管理工具&#xff0c;用于展示项目进度和任务安排。它通过条状图形表示各任务的起止时间&#xff0c;便于直观地查看项目的各个任务的进度和相互关系。 效果 [外链图片转存失败,源站可能有防盗链机制,建议将图片…

(void) (_x == _y)的作用

在阅读宋宝华的《Linux设备驱动开发详解》一书时&#xff0c;看到下面这段代码&#xff1a; #define min(x, y) ({ \ const typeof(x) _x (x); \ const typeof(y) -y (y); \ (void) (&_x &_y); \ _x < _y ? _x : _y; }) 这段代码可以理解如…

变量和标识符

一、变量 变量 数据类型 变量名初始值 常量的定义方式 1.#define 宏常量 (Day是常量&#xff0c;一旦修改就会报错) /2.const修饰的变量 #include <iostream> using namespace std; //变量 数据类型 变量名初始值 //常量的定义方式 //1.#define 宏常量 (Day是常量&…

Vue.js 基础入门指南

前言 在前端开发的广阔领域中&#xff0c;Vue.js 无疑是一颗璀璨的明星&#xff0c;以其渐进式框架的特性吸引了无数开发者的目光。Vue.js 旨在通过简洁的 API 实现响应式的数据绑定和组合的视图组件&#xff0c;使得构建用户界面变得既快速又简单。本文将带你走进 Vue.js 的世…

学习探索RASP:下一代应用安全防护技术

在当今数字化浪潮中&#xff0c;各类信息系统、应用程序不仅是企业数字化转型的驱动力&#xff0c;也成为了网络攻击的集中地带。面对日益复杂多变的网络安全威胁&#xff0c;防火墙等传统防护手段逐渐显得力不从心。在此背景下&#xff0c;寻求一种更为智能、高效且能深度融入…

代码随想录算法训练营第22天|LeetCode 77. 组合、216.组合总和III、17.电话号码的字母组合

1. LeetCode 77. 组合 题目链接&#xff1a;https://leetcode.cn/problems/combinations/description/ 文章链接&#xff1a;https://programmercarl.com/0077.组合.html 视频链接&#xff1a;https://www.bilibili.com/video/BV1ti4y1L7cv 思路&#xff1a;利用递归回溯的方式…

Codeforces Round 954 (Div. 3)

这里写自定义目录标题 A. X Axis题意&#xff1a;题解&#xff1a;代码&#xff1a; B. Matrix Stabilization题意&#xff1a;题解&#xff1a;代码&#xff1a; C. Update Queries题意&#xff1a;题解&#xff1a;代码&#xff1a; D. Mathematical Problem题意&#xff1a;…

nanodiffusion代码逐行理解之diffusion

目录 一、diffusion创建二、GaussianDiffusion定义三、代码理解def __init__(self,model,img_size,img_channels,num_classes,betas, loss_type"l2", ema_decay0.9999, ema_start5000, ema_update_rate1,):def remove_noise(self, x, t, y, use_emaTrue):def sample(…

MySQL 集群

MySQL 集群有多种类型&#xff0c;每种类型都有其特定的用途和优势。以下是一些常见的 MySQL 集群解决方案&#xff1a; 1. MySQL Replication 描述&#xff1a;MySQL 复制是一种异步复制机制&#xff0c;允许将一个 MySQL 数据库的数据复制到一个或多个从服务器。 用途&…

bug——多重定义

bug——多重定义 你的问题是在C代码中遇到了"reference to data is ambiguous"的错误。这个错误通常发生在你尝试引用一个具有多重定义的变量时。 在你的代码中&#xff0c;你定义了一个全局变量data&#xff0c;同时&#xff0c;C标准库中也有一个名为data的函数模板…

【云原生】Kubernetes部署高可用平台手册

部署Kubernetes高可用平台 文章目录 部署Kubernetes高可用平台基础环境一、基础环境配置1.1、关闭Swap1.2、添加hosts解析1.3、桥接IPv4流量传递到iptables的链 二、配置Kubernetes的VIP2.1、安装Nginx2.2、修改Nginx配置文件2.3、启动服务2.4、安装Keepalived2.5、修改配置文件…

Linux 定时任务详解:全面掌握 cron 和 at 命令

Linux 定时任务详解&#xff1a;全面掌握 cron 和 at 命令 Linux 系统中定时任务的管理对于运维和开发人员来说都是至关重要的。通过定时任务&#xff0c;可以在特定时间自动执行脚本或命令&#xff0c;提高系统自动化程度。本文将详细介绍 Linux 中常用的定时任务管理工具 cr…