3.git的分支携带问题是什么?怎么解决?

目录

1.问题

2.知识储备

(1).git是什么

(2).git的常见操作

[1].仓库初始化与克隆

{1}.初始化本地仓库

{2}.克隆远程仓库

[2].日常开发:跟踪与提交修改

{1}.查看文件状态

{2}.暂存文件

{3}.提交到本地仓库

[3].分支管理

{1}.查看分支

{2}.切换分支

{3}.合并分支

{4}.删除分支

[4].远程仓库协作

{1}.推送本地分支到远程

{2}.拉取远程仓库更新

{3}.查看远程仓库信息

(3).git的分支携带问题

[1].为什么你只修改了分支,但是你的master节点也会自动跟着分支修改呢?

{1}.你可能根本没切换到自已的分支,而是一直在master上修改

[{2}.git的分支携带(修改还在工作区 / 暂存区,没提交到你的分支)](#{2}.git的分支携带(修改还在工作区 / 暂存区,没提交到你的分支))

3.分析

4.解决方案

(1).回溯代码

(2).删除代码

(3).重新拉取代码

5.小结

6.扩展


1.问题

小编在写项目代码时,使用了代码管理工具git,小编发现了一个大家很容易忽视的问题-"git的分支携带问题"。起因是小编从远程代码库拉取了master节点的代码,并在本地创建了一个feature节点进行功能开发。然后小编在写好了以后,什么也没做,切换到主节点准备合并,但是!!!! 小编发现主节点居然有了feature的代码,按照理论来说,git的master节点,和feature分支一定是不会同步的!那么为什么会这样呢?又怎么解决呢?

ps: 如果想要系统学习git,可以看一下小编的0基础上手git

2.知识储备

ps: 如果想要系统学习git,可以看一下小编的0基础上手git

想要理解和解决这个问题,一些知识储备是必不可少的。

(1).git是什么

Git 是一款分布式版本控制系统,核心用于跟踪代码(或文件)的修改历史、管理版本,并支持多人协同开发,是开发领域(尤其软件行业)最常用的工具之一。

(2).git的常见操作

下面是在项目开发中常用到的git操作

[1].仓库初始化与克隆

{1}.初始化本地仓库

作用:在项目目录创建新的 Git 仓库

复制代码
git init  # 在当前目录初始化,生成隐藏的 .git 文件夹(仓库核心文件)
{2}.克隆远程仓库

作用:复制远程仓库到本地(如 GitHub/GitLab 上的项目)

复制代码
git clone <远程仓库地址>  # 例:git clone https://github.com/example/repo.git

[2].日常开发:跟踪与提交修改

{1}.查看文件状态

作用:检查工作区(本地文件)与暂存区的差异

复制代码
git status  # 显示哪些文件被修改、新增或待提交
{2}.暂存文件

作用:将工作区的修改添加到「暂存区」(准备提交)

复制代码
git add <文件名>  # 暂存单个文件,例:git add README.md
git add .        # 暂存所有修改(新增、修改、删除的文件)
{3}.提交到本地仓库

作用:将暂存区的修改保存到本地仓库,生成版本记录

java 复制代码
git commit -m "提交说明"  # 例:git commit -m "fix: 修复登录按钮样式问题"

[3].分支管理

{1}.查看分支

作用:列出本地 / 远程分支(当前分支前有 * 标记)

java 复制代码
git branch        # 查看本地分支
git branch -r     # 查看远程分支
git branch -a     # 查看所有分支(本地+远程)
{2}.切换分支

作用:在已有的分支间切换

java 复制代码
git checkout <分支名>  # 例:git checkout develop
{3}.合并分支

作用:将目标分支的代码合并到当前分支(如合并 feature 到 develop)

java 复制代码
git checkout develop       # 先切换到接收合并的分支
git merge feature/login    # 合并 feature/login 到 develop
{4}.删除分支

作用:删除本地 / 远程已完成的分支

java 复制代码
git branch -d <分支名>       # 删除本地分支(需先合并或确认放弃修改)
git push origin --delete <分支名>  # 删除远程分支

[4].远程仓库协作

{1}.推送本地分支到远程

作用:将本地分支的修改同步到远程仓库

java 复制代码
git push origin <本地分支名>  # 例:git push origin feature/login(首次推送)
git push  # 后续推送,默认推送到当前分支关联的远程分支
{2}.拉取远程仓库更新

作用:获取远程仓库的最新代码并合并到本地当前分支

java 复制代码
git pull origin <远程分支名>  # 例:git pull origin develop
git pull  # 简化:拉取当前分支关联的远程分支
{3}.查看远程仓库信息

作用:查看绑定的远程仓库地址

java 复制代码
git remote -v  # 显示 fetch(拉取)和 push(推送)地址

(3).git的分支携带问题

[1].为什么你只修改了分支,但是你的master节点也会自动跟着分支修改呢?

{1}.你可能根本没切换到自已的分支,而是一直在master上修改

最常见的原因是:你以为自己在 "自己的分支" 上开发,但实际上始终在master分支上操作。

检查方法:执行 git branch 命令,看看带 * 号的分支是不是你预期的开发分支(比如 feature/my-branch)。如果 * 号在 master 旁边,说明你一直在master上修改,自然会在master看到这些变化。

{2}.git的分支携带(修改还在工作区 / 暂存区,没提交到你的分支)

如果你在自己的分支修改了代码,但没有执行git commit提交到分支历史 (只是在工作区或暂存区),此时切换到master分支,Git 会默认把这些未提交的修改 "带过去"(因为未提交的内容不属于任何分支,属于当前工作区)。这就是git的分支携带问题

3.分析

出现了git分支携带的问题是,我只想在开发分支上做开发,而不想在master节点做开发,因此我的目的是只有分支上有我的实现代码。但是我在开发完分支节点后,忘记提交到本地仓库,导致我在切换master节点查看要开发的其他模块时,我开发的分支由于git分支携带问题,自动刷新到我的master节点上。

ps: 如果想要系统学习git,可以看一下小编的0基础上手git

4.解决方案

我个人的解决方案是以下三种,我个人会倾向第三种,因为我怕没删干净和回溯的版本有问题(因为回溯可能会有一点问题)

(1).回溯代码

主流的IDE(集成开发环境),如Java的IDEA、Python的Pycharm等都支持代码回溯功能,也就是代码回到某个时间段

我们只要回溯到最开始拉取的时间段,重新编写就可以了

(2).删除代码

为了保证我们的分支是开发好的,master是原来的,我们只要删掉git分支携带 带过来的代码,自然就可以了

(3).重新拉取代码

重新拉取代码,避免分支携带就可以了

ps: 如果想要系统学习git,可以看一下小编的0基础上手git

5.小结

什么你都看到小结了?你难道就是传说中的"勤奋者"?

在本文,

1.你学会了什么是git以及git的常见操作。

2.你学会了什么是git的分支携带,以及如何解决。

式注:如果发现文章有错别字、理解错误、语义错误等问题,请联系作者修改。大家一起努力才能创建更好的生态!

6.扩展

如果想要系统学习git,可以看一下小编的0基础上手git

相关推荐
望获linux4 小时前
【实时Linux实战系列】Linux 内核的实时组调度(Real-Time Group Scheduling)
java·linux·服务器·前端·数据库·人工智能·深度学习
Never_Satisfied4 小时前
在 JavaScript 中,删除数组中内容为xxx的元素
java·前端·javascript
MC丶科5 小时前
【SpringBoot常见报错与解决方案】端口被占用?Spring Boot 修改端口号的 3 种方法,第 3 种 90% 的人不知道!
java·linux·spring boot
新子y5 小时前
【小白笔记】PyTorch 和 Python 基础的这些问题
pytorch·笔记·python
怪兽20145 小时前
Redis常见性能问题和解决方案
java·数据库·redis·面试
zz-zjx5 小时前
JVM 内存结构与 GC 机制详解( 实战优化版)
java·jvm·tomcat
我是李武涯5 小时前
PyTorch DataLoader 高级用法
人工智能·pytorch·python
Lynnxiaowen5 小时前
今天我们开始学习python语句和模块
linux·运维·开发语言·python·学习
nvvas5 小时前
Android Studio JAVA开发按钮跳转功能
android·java·android studio