Git操作总结

可以直接看实践

总结自施磊老师课程

Git与SVN对比

在这里插入图片描述

svn操作流程

  1. 写代码。

  2. 从服务器拉回服务器的当前版本库,并解决服务器版本库与本地代码的冲突。

  3. 将本地代码提交到服务器。

Git操作流程

  1. 写代码, 然后添加(add)到暂存区。

  2. 提交(commit)到本地版本库。

  3. 从服务器拉取(pull)服务器的当前版本库,并解决服务器版本库与本地代码的冲突。

  4. 将远程库与本地代码合并结果提交(commit)到本地版本库。

  5. 将本地版本库推送(push)到服务器

注意:推送代码前一定要拉代码,不然把别人代码冲没了,还要花时间找

对比可以看出:分布式版本管理仅仅是增加了本地库这个概念,其余的概念与集中管理并无区别。——但是 svn 在与服务器同步之前无法提交代码,因而本地修改更容易出问题。

Git常用命令

正常流程基本命令

  • git clone -b master git@github.com:luzhenren/GitLearn.git

​ 将远程仓库指定分支克隆到本地

​ 会自动创建远程仓库名称origin 和 本地仓库

  • git branch

    查看分支

  • git status

    查看哪些代码变化

  • 总流程如下

    在这里插入图片描述

  • git add <要提交的代码>

    将工作区代码提交到了暂存区

  • git commit -m "feat: 初始化提交代码"

    将暂存区代码提交到本地仓库

  • git pull origin <分支名>

    拉取远程仓库代码,合并代码

    如果有冲突,则需要重新处理代码,使其能够编译过,此时处理过后的代码又是新代码,需要再一次 add commit pull。

    确认本地仓库代码一定是最新的了再push,不然会导致别人代码被冲掉。

  • git push origin <本地仓库分支>:<远程仓库分支>

    仓库分支名一致,则可以git push origin <分支名>

    将本地仓库推送到远程仓库

重要!!!

 **提交之前一定要确定代码编译没问题提交之前一定要确定代码编译没问题
提交之前一定要确定代码编译没问题**

异常流程版本回退命令

  • 未使用git add 的时候----在工作区

    git checkout -- <filepathname> # 放弃修改某个文件
    例如: git checkout -- readme.md
    git checkout .  # 放弃所有修改的文件
    git restore .  # 放弃所有修改的文件
    
  • 已经使用git add 的时候----在暂存区

    git reset HEAD <filepathname> # 恢复某个文件到工作区
    例如: git reset HEAD readme.md
    git reset HEAD . # 恢复所有文件到工作区
    git  reset  # 恢复所有文件到工作区
    

    注意:这里只是恢复到了工作区,如果想放弃修改的代码还需要执行上述(放弃工作区)中的操作

  • 已经使用git commit提交的了代码----在本地仓库

    git log查看本地仓库提交记录,记录会带有每次提交的版本号(commit id)

    git reset --hard <commit id> 退到暂存区

  • 已经git push 到了远程分支----在远程仓库

    git push -f origin <分支名>

    确认只有自己更新了,先回退本地仓库,然后强制更新(本地落后于远程只能强制)远程仓库即可

    (如果此期间别人提交了代码,需要协商处理,所以意识到问题后立即告知大家)

代码冲突处理

冲突发生在两个人操作同一个文件的时候

gut pull后文件就会变成如下

<<<<<<<<<<<<<<<<<< HEAD (当前更改)
我的代码
=====================
你的代码
>>>>>>>>>>>>>>>>>>>>>> dsfahowihowqerhqoir2143 (传入更改)

就是看采用你的代码还是我的代码、或者两个人的都要一部分(沟通!!!)

Git分支管理

总结:对于开发,本地分支数与远程分支数一一对应,可以避免很多问题,开发很可靠

本地分支管理

git本地创建多个分支,互不干扰。

情景:在做某个需求a时,先需要修改紧急bug b;发版时发的是远程dev的代码。

方式一(推荐):

(1)本地已有分支dev,写了需求a,先commit,即将工作区的内容提交到版本库中,否则切换到其他分支时,就会覆盖当前工作区的代码。(这步很重要)

(2)在本地创建dev_bug分支,从远程dev分支中check(git checkout -b dev_bug origin/dev)

(3)在本地dev_bug上修改bug,并commit、push到远程dev上

(4)在本地变换到dev,继续做需求a

为了开发新功能不影响master稳定的代码,创建一个新分支来开发

19393@LAPTOP-L9L4QE0T MINGW64 /d/code/github/GitLearn (master)
$ git checkout -b sortdev
Switched to a new branch 'sortdev'19393@LAPTOP-L9L4QE0T MINGW64 /d/code/github/GitLearn (sortdev)
$ git branchmaster
* sortdev

git checkout -b sortdev创建并切换分支sortdev,我在这个分支开发排序功能

使用git pull origin master 指定此分支的远程仓库,并拉取代码

开发完成后,发现推送不成功

解决方案

将sortdev分支,合并到master分支

git checkout master git merge sortdev

PS D:\code\github\GitLearn> git checkout master
Switched to branch 'master'
Your branch is up to date with 'origin/master'.
PS D:\code\github\GitLearn> git merge sortdev
Updating 4e9ad19..db08cf8
Fast-forwardmain.cpp | 13 +++++++++++++1 file changed, 13 insertions(+)

继续推送

PS D:\code\github\GitLearn> git push origin master
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Delta compression using up to 16 threads
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 510 bytes | 510.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
To github.com:luzhenren/GitLearn.git4e9ad19..db08cf8  master -> master

合并分支后,删除原有分支

PS D:\code\github\GitLearn> git branch -d sortdev
Deleted branch sortdev (was db08cf8).
PS D:\code\github\GitLearn> git branch
* master

合并分支冲突

1. 确保工作目录干净

在合并分支之前,确保当前分支的工作目录是干净的(没有未提交的更改),以免产生额外的合并问题。你可以使用以下命令查看当前工作目录状态:

git status
2. 切换到 master 分支(或目标分支)

切换到你希望合并到的目标分支(通常是 master):

git checkout master
3. 合并 dev 分支到 master 分支

使用以下命令将 dev 分支合并到 master 分支中:

git merge dev

如果 devmaster 分支有冲突,Git 会提示你冲突的文件和位置。

4. 解决冲突

编辑冲突的文件,手动解决冲突部分。冲突的代码块通常格式如下:

<<<<<<< HEAD
内容来自当前分支(master)
=======
内容来自合并分支(dev)
>>>>>>> dev

你需要根据实际情况,决定保留哪一部分,或者手动合并它们的内容。修改后的文件可能是这样:

合并后的最终代码内容

完成每个冲突文件的修改后,保存文件并退出编辑器。

5. 标记冲突已解决并提交

解决所有冲突后,执行以下命令将修改添加到暂存区(staging area):

git add <冲突文件1> <冲突文件2> ...

然后提交解决冲突后的更改:

git commit -m "解决 dev 与 master 的冲突"
6. 继续合并或推送

完成合并后,你可以将 master 分支推送到远程仓库:

git push origin master

远程分支管理

版本迭代结束后开启新迭代时,需要新开一个分支作为新版本开发分支

在这里插入图片描述

一般做法:我本地也创建一个新分支,追踪远程的新分支

PS D:\code\github\GitLearn> git checkout -b dev origin/dev1.01.00
Switched to a new branch 'dev'
branch 'dev' set up to track 'origin/dev1.01.00'.

指定了远程仓库后,以后git pull和push就不用使用origin指定远程仓库了

在这里插入图片描述

可以看到追踪关系很明确

如果创建分支时没有设置追踪的远程仓库分支,使用git branch -u <远程仓库名>/<远程分支名>补救

Tag处理

如何使用Git将标签推送到远程仓库|极客笔记

Git工作流实践(!!!)

项目代码远程仓库分支

  • master主分支
  • dev开发分支
  • release:发布分支

个人开发分支

  • feature特性分支
  • bugfix缺陷修改分支
  • hotfix热更新分支

在这里插入图片描述

开发阶段流程总结

  1. 创建个人本地开发分支:git checkout -b feature/add_new_line origin/dev
  2. 个人本地分支推送到远程分支:git push origin feature/add_new_line:feature/add_new_line
  3. 提交个人远程代码分支和目标代码合入分支的MR,相关负责人进行CR
  4. 相关负责人提出意见,本地修改相应的代码,推送到对应的远程代码分支上
  5. 代码CR意见处理完,相关负责人进行代码merge,代码修改从feature/add_new_line合入dev分支完成
  6. 删除个人远程代码分支

bug回归阶段操作同上

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

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

相关文章

直流开关电源技术及应用二

文章目录 8 PFC8.1 基本概念8.1.1 功率因数8.1.2 功率因数偏低带来的影响8.1.3 特点 8.2 有源功率因数校正原理8.2.1不连续工作模式的矫正原理恒频控制技术控制目标控制关键要素控制过程实现方式公式Boost电路和boost pfc电路的联系和区别联系区别 恒导通时间控制 8.2.2 连续工…

UNI-APP_i18n国际化引入

官方文档&#xff1a;https://uniapp.dcloud.net.cn/tutorial/i18n.html vue2中使用 1. 新建文件 locale/index.js import en from ./en.json import zhHans from ./zh-Hans.json import zhHant from ./zh-Hant.json const messages {en,zh-Hans: zhHans,zh-Hant: zhHant }…

typora+picgo core+minio自动上传图片

1. 在服务器上安装docker版本minio 创建/docker/minio文件夹 mkdir -p /docker/minio在此文件夹创建docker-compose.yml version: "3.5" services:minio:image: quay.io/minio/minio:latestcontainer_name: minioprivileged: truerestart: alwaysports:# API接口访…

论文笔记:DepthLab: From Partial to Complete

是一篇很精炼的论文&#xff0c;不知道咋总结了&#xff0c;就差全文翻译了&#xff0c;不过在这里我主要关注3D部分&#xff0c;因为他的pipeline是基于SD的&#xff0c;框图也比较清晰易懂&#xff0c;非常细节的内容可以回头看论文&#xff0c;哈哈哈&#xff0c;给作者大佬…

LeetCode--排序算法(堆排序、归并排序、快速排序)

排序算法 归并排序算法思路代码时间复杂度 堆排序什么是堆&#xff1f;如何维护堆&#xff1f;如何建堆&#xff1f;堆排序时间复杂度 快速排序算法思想代码时间复杂度 归并排序 算法思路 归并排序算法有两个基本的操作&#xff0c;一个是分&#xff0c;也就是把原数组划分成…

Debian-linux运维-docker安装和配置

腾讯云搭建docker官方文档&#xff1a;https://cloud.tencent.com/document/product/213/46000 阿里云安装Docker官方文档&#xff1a;https://help.aliyun.com/zh/ecs/use-cases/install-and-use-docker-on-a-linux-ecs-instance 天翼云常见docker源配置指导&#xff1a;htt…

Qt6.8.1 Mingw13.1 编译opencv4.10时cannot convert ‘char*‘ to ‘LPWSTR

当选择build_world时出错 G:\ForOpencv4.10\opencv-4.10.0\modules\core\src\utils\filesystem.cpp: In function cv::String cv::utils::fs::getCacheDirectory(const char*, const char*): G:\ForOpencv4.10\opencv-4.10.0\modules\core\src\utils\filesystem.cpp:442:43: e…

通过无障碍服务(AccessibilityService)实现Android设备全局水印显示

一、无障碍功能简介 首先我们先来了解下无障碍功能的官方介绍&#xff1a; 无障碍服务仅应用于帮助残障用户使用 Android 设备和应用。它们在后台运行&#xff0c;并在触发 AccessibilityEvents 时接收系统的回调。此类事件表示用户界面中的某些状态转换&#xff0c;例如焦点已…

使用 Docker 搭建 Hadoop 集群

1.1. 启用 WSL 与虚拟机平台 1.1.1. 启用功能 启用 WSL并使用 Moba 连接-CSDN博客 1.2 安装 Docker Desktop 最新版本链接&#xff1a;Docker Desktop: The #1 Containerization Tool for Developers | Docker 指定版本链接&#xff1a;Docker Desktop release notes | Do…

【YOLO 项目实战】(12)红外/可见光多模态目标检测

欢迎关注『youcans动手学模型』系列 本专栏内容和资源同步到 GitHub/youcans 【YOLO 项目实战】&#xff08;10&#xff09;YOLO8 环境配置与推理检测 【YOLO 项目实战】&#xff08;11&#xff09;YOLO8 数据集与模型训练 【YOLO 项目实战】&#xff08;12&#xff09;红外/可…

logback日志框架源码分析

目录 (一)入口:slf4j选择日志框架 (二)日志框架初始化 (1)logback的3种配置方式 a、BasicConfigurator默认配置 b、SPI方式配置的Configurator实现类 c、通过配置文件初始化 (2)xml配置文件初始化 (三)Logger的创建 (四)打印日志 本文源码基于:logback版…

国产数据库OceanBase从入门到放弃教程

1. 介绍 是由蚂蚁集团&#xff08;Ant Group&#xff0c;原蚂蚁金服&#xff09;自主研发的分布式关系型数据库。它旨在解决海量数据存储和高并发访问的问题&#xff0c;特别适合金融级应用场景&#xff0c;如支付宝等对数据一致性、可靠性和性能有极高要求的服务。以下是关于…

连接Milvus

连接到Milvus 验证Milvus服务器正在侦听哪个本地端口。将容器名称替换为您自己的名称。 docker port milvus-standalone 19530/tcp docker port milvus-standalone 2379/tcp docker port milvus-standalone 192.168.1.242:9091/api/v1/health 使用浏览器访问连接地址htt…

安卓入门二 Kotlin基础

Kotlin Kotlin的历史 Kotlin由Jet Brains公司开发设计&#xff0c;2011年公布第一版&#xff0c;2012年开源。 2016年发布1.0正式版&#xff0c;并且Jet Brains在IDEA加入对Kotlin的支持&#xff0c;安卓自此又有新的选择。 2019年谷歌宣布Kotlin成为安卓第一开发语言&#x…

淺談Cocos2djs逆向

前言 簡單聊一下cocos2djs手遊的逆向&#xff0c;有任何相關想法歡迎和我討論^^ 一些概念 列出一些個人認為比較有用的概念&#xff1a; Cocos遊戲的兩大開發工具分別是CocosCreator和CocosStudio&#xff0c;區別是前者是cocos2djs專用的開發工具&#xff0c;後者則是coco…

STM32驱动NRF24L01

一、NRF24L01的相关介绍 1.2 引脚的介绍 关于SPI的引脚就不再说了&#xff0c;这里介绍其余的两个引脚&#xff1a; CE 模块控制引脚&#xff1a;芯片开启信号&#xff0c;激活RX或TX模式 IRQ 模块中断信号输出引脚&#xff1a;其低电平有效&#xff0c;也就是中断时变为低电平…

线性代数期末复习 [基础篇]

关于第六点: AXB 在期末考试中一般A都是可逆的 我们可以先把A的逆求出来,X A − 1 B A^-1B A−1B,或者 (A,B) -> r (E, A − 1 B A^-1B A−1B) 如果A矩阵不可逆,转变为方程组求解问题,假设都是二维矩阵 A(x1,x2) (b1,b2) Ax1 b1,Ax2 b2 XAB 如果A可逆,直接XB A − 1 A^-…

Kali 自动化换源脚本编写与使用

1. 背景与需求 在使用 Kali Linux 的过程中&#xff0c;软件源的配置对系统的更新与软件安装速度至关重要。 Kali 的默认官方源提供了安全且最新的软件包&#xff0c;但有时由于网络条件或地理位置的限制&#xff0c;使用官方源可能会出现速度较慢的问题。 为了解决这一问题&a…

【Unity3D】ECS入门学习(十二)IJob、IJobFor、IJobParallelFor

IJob&#xff1a;开启单个线程进行计算&#xff0c;线程内不允许对同一个数据进行操作&#xff0c;也就是如果你想用多个IJob分别计算&#xff0c;将其结果存储到同一个NativeArray<int>数组是不允许的&#xff0c;所以不要这样做&#xff0c;如下例子就是反面教材&#…

InfoNCE Loss详解(上)

引言 InfoNCE对比学习损失是学习句嵌入绕不开的知识点&#xff0c;本文就从头开始来探讨一下它是怎么来的。 先验知识 数学期望与大数定律 期望(expectation&#xff0c;expected value&#xff0c;数学期望&#xff0c;mathematical expectation)是随机变量的平均值&#…