【git】分支管理

【git】分支管理

 🌈个人主页:秦jh__https://blog.ZEEKLOG.net/qinjh_?spm=1010.2135.3001.5343
🔥 系列专栏:https://blog.ZEEKLOG.net/qinjh_/category_13026221.html?fromshare=blogcolumn&sharetype=blogcolumn&sharerId=13026221&sharerefer=PC&sharesource=qinjh_&sharefrom=from_link

目录

分⽀管理

理解分⽀

创建分⽀

切换分⽀

合并分⽀

删除分⽀

合并冲突

分⽀管理策略

分⽀策略

bug 分⽀

删除临时分⽀

⼩结


前言

💬 hello! 各位铁子们大家好哇。

             今日更新了git分支管理的内容
🎉 欢迎大家关注🔍点赞👍收藏⭐️留言📝

分⽀管理

理解分⽀

分⽀就 是科幻电影⾥⾯的平⾏宇宙,当你正在电脑前努⼒学习 C++ 的时候,另⼀个你正在另⼀个平⾏宇宙⾥ 努⼒学习 JAVA。

如果两个平⾏宇宙互不⼲扰,那对现在的你也没啥影响。不过,在某个时间点,两个平⾏宇宙合并 了,结果,你既学会了 C++ ⼜学会了 JAVA!

在版本回退⾥,已经知道,每次提交,Git都把它们串成⼀条时间线,这条时间线就可以理解为是⼀ 个分⽀。截⽌到⽬前,只有⼀条时间线,在Git⾥,这个分⽀叫主分⽀,即 master 分⽀。

再来理解⼀下HEAD,HEAD 严格来说不是指向提交,⽽是指向master,master才是指向提交的,所 以,HEAD 指向的就是当前分⽀。

每次提交,master分⽀都会向前移动⼀步,这样,随着你不断提交,master分⽀的线也越来越⻓,⽽ HEAD只要⼀直指向master分⽀即可指向当前分⽀。
通过查看当前的版本库,我们也能清晰的理出思路

创建分⽀

Git ⽀持我们查看或创建其他分⽀,在这⾥我们来创建第⼀个⾃⼰的分⽀ dev ,对应的命令为:

当我们创建新的分⽀后,Git 新建了⼀个指针叫 dev, * 表⽰当前 HEAD 指向的分⽀是 master 分 ⽀。另外,可以通过⽬录结构发现,新的 dev 分⽀:

发现⽬前 dev 和 master 指向同⼀个修改。

切换分⽀

使⽤ git checkout 命令即可完成切换
我们发现 HEAD 已经指向了 dev,就表⽰我们已经成功的切换到了 dev 上

在 dev 分⽀下修改 ReadMe ⽂件,并进⾏⼀次提交操作:

dev 分⽀的⼯作完成,我们就可以切换回 master 分⽀。切换回 master 分⽀后,发现ReadMe⽂件中新增的内容不⻅了!赶紧再切回 dev 看看。在 dev 分⽀上,内容还在。

此时查看dev 分⽀和 master 分⽀指向,发 现两者指向的提交是不⼀样的

这是因为我们是在dev分⽀上提交的,⽽master分⽀此刻的提交点并没有变,此时 的状态如图如下所⽰:

当切换到 master 分⽀之时,HEAD 就指向了 master,当然看不到提交了

合并分⽀

为了在 master 主分⽀上能看到新的提交,就需要将 dev 分⽀合并到 master 分⽀

git merge 命令⽤于合并指定分⽀到当前分⽀。合并后,master 就能看到 dev 分⽀提交的内容 了。此时的状态如图如下所⽰。



Fast-forward 代表“快进模式”,也就是直接把master指向dev的当前提交,所以合并速度⾮常快。 当然,也不是每次合并都能 Fast-forward。

删除分⽀

合并完成后, dev 分⽀对于我们来说就没⽤了, 那么dev分⽀就可以被删除掉,注意如果当前正处于某 分⽀下,就不能删除当前分⽀,如:

⽽可以在其他分⽀下删除当前分⽀

此时的状态如图所示:

因为创建、合并和删除分⽀⾮常快,所以Git⿎励你使⽤分⽀完成某个任务,合并后再删掉分⽀,这和 直接在master分⽀上⼯作效果是⼀样的,但过程更安全。

合并冲突

在实际分⽀合并的时候,并不是想合并就能合并成功的,有时候可能会遇到代码冲突的问题。

创建⼀个新的分⽀ dev1 ,并切换⾄⽬标分⽀,我们可以使⽤ git checkout - b dev1 ⼀步完成创建并切换的动作
原本master主分支的文件的内容是aaa,此时我们创建dev1分支,然后修改文件内容为bbb并提交。切换到master主分支,对内容修改为ccc,并提交。

现在, master分支和dev1分⽀各⾃都分别有新的提交,变成了这样:

这种情况下,Git 只能试图把各⾃的修改合并起来,但这种合并就可能会有冲突。

发现 ReadMe ⽂件有冲突后,可以直接查看⽂件内容

Git 会⽤ <<<<<<<,=======,>>>>>> 来标记出不同分⽀的冲突内容。

此时我们必须要⼿动调整冲突代码,把要的留下,不要的删去,并需要再次提交修正后的结果!

到这⾥冲突就解决完成,此时的状态变成了

⽤带参数的 git log也可以看到分⽀的合并情况:

*在这里的绿线上是在dev1分支上,在这里的红线上是在master主分支上。这里的颜色只是用来区分而已。

分⽀管理策略

通常合并分⽀时,如果可能,Git 会采⽤ Fast forward 模式。还记得如果我们采⽤ Fast forward 模式之后,形成的合并结果是什么呢?回顾⼀下

在这种 Fast forward 模式下,删除分⽀后,查看分⽀历史时,会丢掉分⽀信息,看不出来最新提 交到底是 merge 进来的还是正常提交的。

但在合并冲突部分,我们也看到通过解决冲突问题,会再进⾏⼀次新的提交,得到的最终状态为

那么这就不是 Fast forward 模式了,这样的好处是,从分⽀历史上就可以看出分⽀信息。例如我 们现在已经删除了在合并冲突部分创建的 dev1 分⽀,但依旧能看到 master 其实是由其他分⽀合并 得到:

 Git ⽀持我们强制禁⽤ Fast forward 模式,那么就会在 merge 时⽣成⼀个新的 commit ,这样, 从分⽀历史上就可以看出分⽀信息。

--no-ff 参数,表⽰禁⽤ Fast forward 模式。禁⽤ Fast forward 模式后合并会创建 ⼀个新的 commit ,所以加上 -m 参数,把描述写进去。

不使⽤ Fast forward 模式,merge后就像这样:

所以在合并分⽀时,加上 --no-ff 参数就可以⽤普通模式合并,合并后的历史有分⽀,能看出来曾 经做过合并,⽽ fast forward 合并就看不出来曾经做过合并。

分⽀策略

在实际开发中,我们应该按照⼏个基本原则进⾏分⽀管理:

⾸先,master分⽀应该是⾮常稳定的,也就是仅⽤来发布新版本,平时不能在上⾯⼲活;

那在哪⼲活呢?⼲活都在dev分⽀上,也就是说,dev分⽀是不稳定的,到某个时候,⽐如1.0版本发布 时,再把dev分⽀合并到master上,在master分⽀发布1.0版本;

你和你的⼩伙伴们每个⼈都在dev分⽀上⼲活,每个⼈都有⾃⼰的分⽀,时不时地往dev分⽀上合并就 可以了。

所以,团队合作的分⽀看起来就像这样:

bug 分⽀

假如我们现在正在 dev2 分⽀上进⾏开发,开发到⼀半,突然发现 master 分⽀上⾯有 bug,需要 解决。在Git中,每个 bug 都可以通过⼀个新的临时分⽀来修复,修复后,合并分⽀,然后将临时分⽀ 删除。

可现在 dev2 的代码在⼯作区中开发了⼀半,还⽆法提交,怎么办?

Git 提供了 git stash 命令,可以将当前的⼯作区信息进⾏储藏,被储藏的内容可以在将来某个时 间恢复出来。



⽤ git status 查看⼯作区,就是⼲净的(除⾮有没有被 Git 管理的⽂件),因此可以放⼼地创建分 ⽀来修复bug。

储藏 dev2 ⼯作区之后,由于我们要基于master分⽀修复 bug,所以需要切回 master 分⽀,再新 建临时分⽀来修复 bug,⽰例如下:

修复完成后,切换到 master 分⽀,并完成合并,最后删除 fix_bug 分⽀:

⾄此,bug 的修复⼯作已经做完了,我们还要继续回到 dev2 分⽀进⾏开发。切换回 dev2 分⽀:

⼯作区是⼲净的,刚才的⼯作现场存到哪去了?⽤ git stash list 命令看看:

⼯作现场还在,Git 把 stash 内容存在某个地⽅了,但是需要恢复⼀下,如何恢复现场呢?我们可以使 ⽤ git stash pop 命令,恢复的同时会把 stash 也删了,⽰例如下:

再次查看的时候,我们已经发现已经没有现场可以恢复了

另外,恢复现场也可以采⽤ git stash apply 恢复,但是恢复后,stash内容并不删除,你需要 ⽤ git stash drop 来删除;

你可以多次stash,恢复的时候,先⽤ git stash list 查看,然后恢复指定的stash,⽤命令 git stash apply stash@{0}

恢复完代码之后我们便可以继续完成开发,开发完成后便可以进⾏提交:

但我们注意到了,修复 bug 的内容,并没有在 dev2 上显⽰。此时的状态图为:

Master 分⽀⽬前最新的提交,是要领先于新建 dev2 时基于的 master 分⽀的提交的,所以我们 在 dev2 中当然看不⻅修复 bug 的相关代码。

我们的最终⽬的是要让 master 合并 dev2 分⽀的,那么正常情况下我们切回 master 分⽀直接合 并即可,但这样其实是有⼀定⻛险的。

是因为在合并分⽀时可能会有冲突,⽽代码冲突需要我们⼿动解决(在 master 上解决)。我们⽆法 保证对于冲突问题可以正确地⼀次性解决掉,因为在实际的项⽬中,代码冲突不只⼀两⾏那么简单, 有可能⼏⼗上百⾏,甚⾄更多,解决的过程中难免⼿误出错,导致错误的代码被合并到 master 上。 此时的状态为:

解决这个问题的⼀个好的建议就是:最好在⾃⼰的分⽀上合并下 master ,再让 master 去合并 dev ,这样做的⽬的是有冲突可以在本地分⽀解决并进⾏测试,⽽不影响 master 。此时的状态 为:

对应的实操演⽰如下:

可以看到合并后有冲突,这时就需要我们手动解决冲突。把需要的内容留下

解决完冲突后,需要重新提交一下。

然后切回到master分支,在这里把dev2分支给合并起来。此时就没有冲突了。

最后再删除没用的分支即可:

删除临时分⽀

软件开发中,总有⽆穷⽆尽的新的功能要不断添加进来。

添加⼀个新功能时,你肯定不希望因为⼀些实验性质的代码,把主分⽀搞乱了,所以,每添加⼀个新 功能,最好新建⼀个分⽀,我们可以将其称之为 feature 分⽀,在上⾯开发,完成后,合并,最 后,删除该 feature 分⽀。

可是,如果我们今天正在某个 feature 分⽀上开发了⼀半,被产品经理突然叫停,说是要停⽌新功 能的开发。虽然⽩⼲了,但是这个 feature 分⽀还是必须就地销毁,留着⽆⽤了。这时使⽤传统 的 git branch -d 命令删除分⽀的⽅法是不⾏的。

此时要删除必须把小写的d换成大写的D。

没有merge的分支,只能用D来强制删除。merge的分支才能用小d删除。

⼩结

分⽀在实际中有什么⽤呢?假设你准备开发⼀个新功能,但是需要两周才能完成,第⼀周你写了50% 的代码,如果⽴刻提交,由于代码还没写完,不完整的代码库会导致别⼈不能⼲活了。如果等代码全 部写完再⼀次提交,⼜存在丢失每天进度的巨⼤⻛险。

现在有了分⽀,就不⽤怕了。你创建了⼀个属于你⾃⼰的分⽀,别⼈看不到,还继续在原来的分⽀上 正常⼯作,⽽你在⾃⼰的分⽀上⼲活,想提交就提交,直到开发完毕后,再⼀次性合并到原来的分⽀ 上,这样,既安全,⼜不影响别⼈⼯作。

并且 Git ⽆论创建、切换和删除分⽀,Git在1秒钟之内就能完成!⽆论你的版本库是1个⽂件还是1万个 ⽂件。

Read more

【毕业论文没思路?paperxm智能写作一键解决!】

【毕业论文没思路?paperxm智能写作一键解决!】

毕业论文写作困境的常见原因 缺乏明确的研究方向或选题,导致难以展开论文框架。文献综述不足,无法有效支撑论点,造成写作停滞。时间管理不当,临近截止日期时压力倍增。对学术写作规范不熟悉,格式和逻辑容易出错。 paperxm的链接我就给大家放着了哈:www.paperxm.com Paperxm智能写作工具的核心功能 基于自然语言处理技术,自动生成论文大纲和初稿,提供选题建议。内置文献检索模块,快速匹配相关学术资源,辅助文献综述。支持多语言写作,满足不同学科领域的表达需求。实时语法检查和格式修正,确保论文符合学术规范。 如何使用Paperxm 它从开题报告、文献综述、论文写作还有仿写、到最后的答辩PPT都能帮我直接解决! 优势一:节省时间 使用paperxm写论文,可以让我告别繁琐的资料搜集和整理工作。paperxm能迅速从海量资料中筛选出有用的信息,为我的论文提供有力支持。这样一来,你就有更多的时间去思考、创新,提高论文质量。 优势二:提高写作质量 paperxm具有强大的语言处理能力,可以帮助我优化句子结构、纠正语法错误,甚至提供写作建议。这意味着,我的论文在pape

By Ne0inhk
2026最火的6款免费AI写作软件测评:ai写网文哪个好用?这款ai消痕工具

2026最火的6款免费AI写作软件测评:ai写网文哪个好用?这款ai消痕工具

很多朋友想在业余时间写写番茄、起点网文或者搞搞短剧赚点外快,但总是卡在“憋不出字”或者“大纲写崩”上。现在都2026年了,用ai写作软件来辅助写小说早就不是秘密了。 但是,网文平台的审核越来越严,很多新手直接用AI生成的文章发出去,立马就被平台判定为“AI生成”导致限流,不仅没流量,连全勤奖都拿不到。 今天,我们就抛开那些晦涩难懂的技术术语,用大白话给大家实测目前市面上热度最高的6款免费ai写作平台。到底ai写网文哪家强?怎么解决让人头疼的“机器味”?这篇超详细的避坑指南,建议想靠文字搞钱的朋友直接收藏! 一、 6大热门免费AI小说工具优缺点大盘点 我们选了大家最常搜的几款工具,直接看它们在实际写小说、写剧本时的真实表现。 1. 豆包:起名和找灵感的“点子王” * 优点:速度飞快,完全免费。你如果卡文了,或者不知道主角叫什么、书名怎么起才能吸引人,直接问豆包,它能一秒钟给你吐出几十个极其符合抖音、小红书调性的网感标题和名字。 * 缺点:千万别让它直接给你写正文!它的AI味太重了,动不动就是“嘴角勾起一抹弧度”、“倒吸一口凉气”。把这种文发到小说平台,

By Ne0inhk

GitHub Copilot 教程

文章来源:https://vscode.it-docs.cn/docs/copilot/overview.html GitHub Copilot 为 Visual Studio Code 增加了多代理开发功能。规划好你的方法,然后让AI代理在项目中实现并验证代码变更。并行运行多个代理会话:本地、后台或云端。从一个中心视角管理所有角色。内联建议、内联聊天和智能行为会帮助你完成整个编码流程。 代理与代理会话 代理端到端地处理完整的编码任务。给代理一个高级任务,它会将工作拆分成步骤,编辑文件,运行终端命令,调用工具,并在遇到错误或测试失败时自我纠正。每个任务都运行在一个代理会话中,这是一个持续存在的对话,你可以跟踪、暂停、继续或交接给另一个代理。 重要 你们组织可能在VS Code中禁用了代理。请联系你的管理员以启用此功能。 从中央视图管理会话 并行运行多个代理会话,每个会话专注于不同的任务。聊天面板中的会话视图为你提供了一个统一的地方来监控所有活跃会话,无论是本地运行、后台还是云端运行。查看每次会话的状态,切换,查看文件变更,

By Ne0inhk
Visual Studio 使用 GitHub Copilot 与 IntelliCode 辅助编码 【AI辅助开发系列】

Visual Studio 使用 GitHub Copilot 与 IntelliCode 辅助编码 【AI辅助开发系列】

🎀🎀🎀【AI辅助编程系列】🎀🎀🎀 1. Visual Studio 使用 GitHub Copilot 与 IntelliCode 辅助编码 2. Visual Studio 安装和管理 GitHub Copilot 3. Visual Studio 使用 GitHub Copilot 扩展 4. Visual Studio 使用 GitHub Copilot 聊天 5. Visual Studio 使用 GitHub Copilot 协助调试 6. Visual Studio 使用 IntelliCode AI 辅助代码开发 7. Visual Studio 玩转 IntelliCode AI辅助开发

By Ne0inhk