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的分支携带(修改还在工作区 / 暂存区,没提交到你的分支)
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}.提交到本地仓库
作用:将暂存区的修改保存到本地仓库,生成版本记录
git commit -m "提交说明" # 例:git commit -m "fix: 修复登录按钮样式问题"
[3].分支管理
{1}.查看分支
作用:列出本地 / 远程分支(当前分支前有 *
标记)
git branch # 查看本地分支
git branch -r # 查看远程分支
git branch -a # 查看所有分支(本地+远程)
{2}.切换分支
作用:在已有的分支间切换
git checkout <分支名> # 例:git checkout develop
{3}.合并分支
作用:将目标分支的代码合并到当前分支(如合并 feature 到 develop)
git checkout develop # 先切换到接收合并的分支
git merge feature/login # 合并 feature/login 到 develop
{4}.删除分支
作用:删除本地 / 远程已完成的分支
git branch -d <分支名> # 删除本地分支(需先合并或确认放弃修改)
git push origin --delete <分支名> # 删除远程分支
[4].远程仓库协作
{1}.推送本地分支到远程
作用:将本地分支的修改同步到远程仓库
git push origin <本地分支名> # 例:git push origin feature/login(首次推送)
git push # 后续推送,默认推送到当前分支关联的远程分支
{2}.拉取远程仓库更新
作用:获取远程仓库的最新代码并合并到本地当前分支
git pull origin <远程分支名> # 例:git pull origin develop
git pull # 简化:拉取当前分支关联的远程分支
{3}.查看远程仓库信息
作用:查看绑定的远程仓库地址
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