Git分支切换的正确操作,你真的会吗?

git idea 分支切换代码覆盖_git+idea等切换分支、合并分支等操作 1. 场景 : 已经有 idea , git 以及主分支 跟 分支现在我是在 分支上,怎么切换回主分支上去 :选择 vcs -> git -> rebase (变基) -》2. 场景同1,也是: 已经有 idea , git 以及主分支 跟 分支这里,我们可以使用idea 右下角的 checkout 到一个分支上去就行,但是本地要有这个分支3. 空的VCS 项目,提交到 git ... 阅读详情
AI摘要

本文探讨了在使用Git进行版本控制时,如何正确处理本地与远程分支间的切换与同步,特别是未提交更改的情况下的最佳实践。

场景一:本地分支之间的切换

1、不commit代码就切换分支

我们来看看,在本地多个分支时,不commit就切换分支会发生什么:

首先,创建一个maven工程,添加一个Java类:GitDemo,并添加如下代码:

package com.tencent;

/**
 * GitDemo.java
 *
 * @Author: CZQ
 * @CreateTime: 17:47-2021/3/21
 * @Description:
 */
public class GitDemo {

    public static void main(String[] args) {
    }
}

在这里插入图片描述
然后,我们新建一个dev分支,并在dev的GitDemo类的main方法中,添加如下代码:

System.out.println("don not commit and checkout");

在这里插入图片描述

我们不commit,直接切换回master分支

在这里插入图片描述
发现代码也被带过来了,没有丢失。

我们在master分支中,把main方法里的代码删掉,再加一行

System.out.println("hello world");

然后切换回dev分支:
在这里插入图片描述
可以发现,dev分支的代码一直跟master保持一致。这似乎看不出什么问题,可是,我们的dev的原先的代码:

 System.out.println("don not commit and checkout");

已经被覆盖了,也就是说,dev的代码已经丢失了一部分,这并不是一个好的提交方式。

2、commit后再切换分支

我们在现有的基础上,在dev分支加上一行代码:

 System.out.println("commit and checkout");

在这里插入图片描述
先commit:
在这里插入图片描述
然后再切换回master分支:
在这里插入图片描述
我们发现,master分支默认打开的并不是GitDemo这个类,而且也找不到这个类,而是打开了pom文件,原因是一开始我们创建的GitDemo类之后,并没有进行commit,所以master分支并没有这个类。

我们在master分支创建一个GitTest类:

在这里插入图片描述
同样先commit:
在这里插入图片描述

再切换回dev分支:
dev分支
我们发现dev分支中并没有这个类,说明dev分支和master分支并不一致,dev没有被覆盖。

3、不commit时有冲突会怎样?

我们刚才在master分支中新建了一个GitTest类:
在这里插入图片描述

同样的,我们在dev中也去新建一个GitTest类:

在这里插入图片描述

这次,我们加一个main方法,在里面添加一行代码,然后,我们切换到master分支:
在这里插入图片描述
出现master分支上的GitTest类将会被重写的提示,我们选择smart checkout,提示是否重写,我们选择cancel:
在这里插入图片描述
这样,本地maser分支上的代码就不会被dev覆盖掉了:
在这里插入图片描述
然后,我们切换回dev分支:
在这里插入图片描述
GitTest类就不见了!!!可以发现,代码已经丢失。

那如果我们刚才选择override之后,再切换呢?

我们在master分支上的GitTest类中新加一行代码
在这里插入图片描述
然后commit之后checkout到dev上,在dev上加上同名不同代码的GitTest类:

在这里插入图片描述

我们不commit直接再次切换:
在这里插入图片描述

这次选择override:

在这里插入图片描述
可以看到,master原有的代码已经被覆盖:
在这里插入图片描述
我们不commit,再次切回dev:
在这里插入图片描述
仍然选择smart checkout,这次提示需要rollback:
在这里插入图片描述

我们选择rollback:
在这里插入图片描述
rollback后GitTest这个类还是消失了,checkout到master分支,原有的被覆盖的代码又回来了:
在这里插入图片描述
这并不是我们想要的结果。

那如果我们选择force checkout,又会是怎样的结果?

我们再次在dev上新建GitTest类,这次我们跟master代码保持一致,同样不commit,然后直接checkout
在这里插入图片描述
选择force checkout,结果master分支无变化:
在这里插入图片描述

再次切换回dev分支:
在这里插入图片描述
发现GitTest文件不见了。

总结:

  1. 不同分支之间,不commit直接切换时,如果没有commit的分支上新增的内容是一个全新的文件,即和要切换过去的分支没有同名的文件时,该文件会被同步到要切换过去的分支,切换回来文件也不会丢失;
    例如:场景一的第1种情况。

  2. 不同分支之间,不commit直接切换时,如果没有commit的分支上新增的内容是一个已有文件的代码时,如果发生冲突时,选择force checkout,则两边都不会保存该新增的内容,代码丢失;如果发生冲突时,选择smart
    checkout,则该段代码会被同步到要切换的分支,如果从该分支重新切回原分支(例如dev),会提示选择smart
    checkout还是force checkout,选择force
    checkout,则两边都不会保存该新增的内容,代码同样会丢失,选择smart checkout,则该段代码会在原分支上继续保留
    例如:场景一的第2种情况

  3. 不同分支之间,不commit直接切换时,如果没有commit的分支上新增的内容是一个和其他分支同名的文件,会提示选择smart checkout还是force checkout,如果选择force,则两个分支上都不会保留该文件的代码;如果选择smart
    checkout,则切换后目标分支上会被override,如果在目标分支上不commit,直接切回原分支,会提示原有的类不存在,需要rollback,可是rollback后,原来新建的同名类仍会不见,切回目标分支,发现被override的代码重新rollback,造成dev代码丢失。
    例如:场景一的第3种情况。

  4. 先commit再切换,则不存在本地代码和文件被覆盖的问题,如果有冲突时,也不会提示。 例如:场景二的第2种情况。

场景二:本地分支和远程分支之间同时更新代码

我们将本地dev代码push到GitHub上,模拟一下真实的开发场景:

在这里插入图片描述

然后,我们在本地上对代码进行修改:
在这里插入图片描述

上图是原有的IGitDemo类,已删除main方法中的所有语句。

这时GitHub上的代码如下:
在这里插入图片描述

我们不commit的情况下,直接pull代码:

在这里插入图片描述
本地跟远程没有冲突,当然,也没有同步。

我们在本地上再添加一行代码:

System.out.println("I don not know why do not asyn");

再次pull代码:

还是没有冲突,而且本地代码跟远程还是没有保持同步:
在这里插入图片描述
那我们修改一下远程代码:

在这里插入图片描述
可以发现,在GitHub上是需要先commit再update代码,所以,我们先commit,然后我们再次在本地pull代码:

在这里插入图片描述
毫不意外地出现了冲突,我们合并代码即可。

总结:远程分支和本地分支不一致时,如果不是同一个文件的同一处进行修改,不commit的情况下,文件也不会冲突,也不会被覆盖。

场景三:本地和远程分支之间切换

在update到跟远程一样后:
在这里插入图片描述
我们本地的代码已经无需commit了,这时,我们在远程master分支上再添加一个Java文件:iteminfo.java
在这里插入图片描述
我们在本地dev也添加一个类:GitMini.class
在这里插入图片描述
然后,我们直接切换到远程的master分支:

在这里插入图片描述
跟本地一样,我们的dev中的文件已经同步到本地master了,那我们再次切回dev:
在这里插入图片描述

文件还在,所以这种场景跟场景一是相同的。

总结

1、当本地不同分支或者本地和远程不同分支之间进行切换时,一定要先commit,否则会有代码或者文件被覆盖的风险;

2、本地分支和远程相同分支之间,先commit还是先pull都不会有代码被覆盖的风险,但是如果有冲突的情况下,如果merge不当,代码也有可能被覆盖。如果仅仅为了规范,也可以先pull再commit;但安全起见,建议还是先commit之后再pull。

华为交换机链路聚合对接思科交换机链路聚合故障 2台华为交换机采用堆叠方式与思科交换机之间使用链路聚合,华为交换机与cisco交换机链路捆绑接口频繁UP/DOWN,业务中断。 阅读详情

相关推荐

VTK四视图联动避坑指南:解决vtkImagePlaneWidget窗宽窗位同步与切片序号更新的那些坑

本文详细解析了VTK四视图联动开发中的关键技术点与常见问题,包括切片位置同步、窗宽窗位同步的实现原理及回调机制设计。针对开发中遇到的回调事件不触发、渲染性能低下等问题,提供了实用的解决方案和优化技巧,帮助开发者高效构建医学影像和科学可视化应用。

weixin_42638178的博客 391

git操作

vscode拉取git代码 //初始化 git init //连接git git remote add origin http://xxx@192.168.1.13:38765/r/bookshopVUE.git //拉取 git clone http://xxx@192.168.1.13:38765/r/bookshopVUE.git 切换分支 首先通过 $ git branch -a 来查看所在目录的分支 $ git branch -a master * trunk remotes/o

Auroral_Su的博客 1557

VINS-Mono 时延估计论文翻译

Online Temporal Calibration for Monocular Visual-Inertial Systems 摘要 精确的状态估计是机器人导航、自主驾驶、虚拟现实和增强现实等各种智能应用的基础模块。视觉惯性融合是近年来流行的六自由度状态估计技术。记录不同传感器测量值的时刻对系统的鲁棒性和准确性至关重要。在实践中,每个传感器的时间戳通常会受到触发和传输延迟的影响,从而导致不同传感器之间的时间偏差(时间偏移)。这种时间偏移严重影响传感器融合的性能。为此,我们提出了一种标定视觉和

weixin_39061796的博客 1255

git快速入门(3)__ 分支创建、切换和合并

git 分支创建 切换 合并

caohongxing的博客 1万+

C++新手也能搞定!Windows下Cesium-Native编译全流程(附依赖下载技巧)

本文为C++新手详细介绍了在Windows系统下编译Cesium-Native库的全流程。重点针对网络环境不佳的情况,提供了手动下载依赖库的实用技巧,并指导用户使用CMake配置、生成解决方案,最终完成编译与测试验证,帮助开发者成功构建这一处理3D地理空间数据的C++运行时库。

weixin_28839549的博客 380

利用ADS设计射频功率放大器

利用ADS设计射频功率放大器 任务: 用飞思卡尔公司的功率放大器芯片ATF27s006NT1设计射频功放,芯片频率范围可达450MHz-3.6GHz。 功放指标: (1) 工作频率:500MHz (2) 增益:G>20dB (3) 电源:+28V (4) 最大输出功率:2W(33dBm) 设计思路 (1)安装DesignKit模型; (2)直流DC扫描; (3)稳定性分析; (4)偏置电路设计及整...

UVM频率 3万+

Git:分支管理

本篇博客详细讲解了Git的分支管理相关操作,创建、切换、合并、删除分支,并说明了合并冲突等问题的解决方式

一名还在努力学习技术的程序员的博客 7527

深入解析EDID中Display Descriptor Block的配置技巧与实战应用

本文深入解析EDID中Display Descriptor Block的配置技巧与实战应用。通过剖析像素时钟、有效像素、消隐区与同步脉冲等核心参数,并结合1280x720@60Hz的实战配置案例,指导开发者如何正确为定制硬件或非标准显示器编写“身份证”,避免黑屏、分辨率异常等问题,确保显示设备完美点亮。

1a2s3d4f5g的博客 878

git 切换分支

1. 查看远程分支,查看当前所有 git branch -a 2. 查看本地分支 git branch * master 3. 切换分支 git checkout -b test origin/test

zyh2468的博客 1万+

SpringBoot文件上传实战:MultipartFile重复读取的3种方法(附避坑指南)

本文详细介绍了SpringBoot中处理MultipartFile重复读取的3种实用方法,包括字节数组缓存法、临时文件法和流重置法,并提供了避坑指南和性能优化技巧。特别适合需要多次读取上传文件内容的开发者,帮助解决InputStream流只能读取一次的问题。

weixin_28710999的博客 398

ArduPilot移植到自定义硬件:完整指南

详解如何将ArduPilot成功移植到自定义硬件平台,涵盖环境搭建、代码配置与调试技巧。无论是初学者还是进阶开发者,都能快速掌握ArduPilot在不同硬件上的适配方法,提升开发效率。

weixin_28931449的博客 637

Git 切换分支,拉取分支,删除本地分支和删除远程分支代码指令操作\合并指定内容到某分支

git与github的区别:git可以认为是一个软件,能够帮你更好的写程序,github则是一个网站,这个网站可以帮助程序员之间互相交流和学习。 git clone to ... 从远程克隆下来到本地 git pull origin dev(远程分支名称) 把远程代码拉下来到本地 git status 查看状态 git add . 全部添加 git commit -m '修改日志'...

林中明月间丶 5万+

MAX30102心率血氧传感器原理图设计,已量产(e-Health传感器)

在最近的便携健康监测设备项目中,我们采用了集成算法的 MAX30102 心率血氧模块 —— 这类带内置 MCU 算法的传感器能直接输出心率 / 血氧数值,大幅降低了主控资源占用。但硬件电路的稳定性直接决定了 PPG 信号的采集精度,下面结合实际项目里的原理图,拆解下这个模块的设计细节。

不脱发的程序猿 1278

Idea 中切换git分支

idea中切换分支开发

闲言 7万+

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Git 怎么切换分支

Git 切换分支

hb1993的博客 21万+

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

git命令切换分支、更新分支

1、查看分支: 命令:git branch -a $ git branch -a master remotes/origin/20201228 remotes/origin/HEAD -> origin/master remotes/origin/develop remotes/origin/master 2、切换分支: 命令:git checkout -b 20201228 origin/20201228 第一个参数 - 20201228:是下载到本地的分支名称 第二个参数 -

GreatOneDay的博客 1万+

git 怎么切换分支命令_git命令-切换分支

git一般有很多分支,我们clone到本地的时候一般都是master分支,那么如何切换到其他分支呢?1. 查看远程分支$ git branch -a我在mxnet根目录下运行以上命令:~/mxnet$ git branch -a* masterremotes/origin/HEAD -> origin/masterremotes/origin/masterremotes/origin/nnv...

weixin_39940770的博客 2万+

Git拉取、切换分支等操作

当你在本地计算机上通过git clone命令克隆了一个 Git 仓库后,你会得到一个与远程仓库相对应的本地副本。这个本地副本包含了远程仓库的所有历史记录、分支、标签等。接下来,我会详细解释在该目录下启动 Terminal 并使用 Git 命令来查看和切换分支,以及执行其他 Git 命令的操作。

Ethan_Rich的博客 4805

git 新建分支并切换到该分支_git分支的创建、删除、切换、合并

1. 先看一下git的命令:查看本地分支 git branch ;查看远程分支 git branch -r ;切换分支 git checkout -b agrochemical origin/agrochemical;查看所属分支 git branch -a;回退命令: $ git reset --hard HEAD^;回退到上个版本 $ git reset --hard HEAD~3;回退到前3...

weixin_30453651的博客 6439

GIT切换分支的简单操作

切换到要操作的项目文件夹或进入本地项目文件然后右键打开git bash here 命令框 切换到要操作的项目文件夹命令 cd  ProjectPath 查看项目分支(包括本地和远程) 执行命令 git branch -a 删除本地分支  执行命令 git branch -d 分支名 删除远程分支  执行命令 git push origin –delete 分支名 切换分...

ai_haibin的博客 4645

git 新建分支并切换到该分支_git切换到指定分支,git新建分支与合并

一,git切换到指定分支使用git进行开发的时候经常会遇到需要切换远程分支并且提交到远程指定分支的情况,操作如下1,查看远程所有分支git branch -agit branch不带参数,列出本地已经存在的分支,并且在当前分支的前面用*标记,加上-a参数可以查看所有分支列表,包括本地和远程,远程分支一般会用红色字体标记出来*devmasterremotes/origin/HEAD -> or...

weixin_33289964的博客 4175

git切换分支遇到的小问题

能在IDEA编辑器右下角的git分支显示里面看到一个新的分支,但是不能切换到; 各种pull更新操作都不管用,(后来想到可能是用了自己以前的git账户,只有几个分支某一次被管理员给了权限,其他的分支没有权限) 是因为换电脑之后修改过git账户,用了一个以前自己的个人账户,被管理员临时给了当前修改的一些分支的权限,这个账户和凭据没有其他权限,比如新建的分支,切换git用户: 1.git bash here 打开git命令窗口 查看当前用户名: git config user.name 切换邮箱: git c

whyIJump的博客 1921

git:分支切换

1.分支简介分支:是针对某类开发工作的一个提交结点序列,序列中最新的提交表示了该分支代码的最新版本。分支通常根据工作类别命名,例如: dev 、 test 分支;使用分支意味着你可以分离各个开发路线,然后在彼此不影响情况下同时向前推进。当前分支:一个仓库经常有多个分支。但在任何时刻,开发者只能在众多分支中的某一个分支上工作,这个处于工作状态的分支称为当前分支。在 git 命令中,当前分支经常使用引用 HEAD 来表示。HEAD指向当前分支的当前所在的某个提交节点.

lichengyang的博客 4891

git 怎么切换分支命令_如何在Git中切换分支

本指南向你展示了如何在Git项目中切换分支。前提条件Git项目访问终端窗口/Linux系统命令行签出命令以切换分支访问命令行并使用checkout命令签出要使用的分支:git checkout [branch_label]将[branch_label]替换为要访问的分支的实际名称,例如:git checkout bugfix224已成功切换到bugfix224分支,可以开始处理它。创建并签出新分支...

weixin_39908070的博客 1985
上一篇: nacos访问显示404
下一篇: Git必学的merge和rebase区别
codu4u1314
博客等级 码龄7年 29粉丝 19原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值