软件开发新手入门五大核心技能之版本控制工具(三)

简介: 教程来源 http://wkmsa.cn/ Git分支是其“杀手级特性”,本质为轻量可移动指针,指向提交对象。支持快速创建、切换、合并与变基,实现并行开发、风险隔离与高效协作。含快进/三方合并、冲突解决及交互式历史重写等核心能力。

第四章 分支 —— Git 的杀手级特性

4.1 理解分支模型
分支本质上是一个指向提交对象(commit)的可移动指针。Git 的默认分支名为 master 或 main。

master 分支
    |
    v
C0 --- C1 --- C2 --- C3 (HEAD->master)

创建新分支时,只是创建了一个新的指针:

C0 --- C1 --- C2 --- C3 (HEAD->master, develop)

切换分支后,工作目录会变成该分支的最新快照。
4.2 基本分支操作

# 列出所有本地分支(当前分支带 *)
git branch

# 列出远程分支
git branch -r

# 列出所有分支(本地+远程)
git branch -a

# 创建新分支(但不会切换)
git branch feature-login

# 切换到一个分支
git checkout feature-login
# 或使用新命令
git switch feature-login

# 创建并切换到新分支(一步到位)
git checkout -b feature-login
git switch -c feature-login

# 删除分支(必须确保不在该分支上)
git branch -d feature-login      # 已合并的分支
git branch -D feature-login      # 强制删除未合并的分支

# 重命名当前分支
git branch -m new-name

# 重命名任意分支
git branch -m old-name new-name

4.3 合并(Merge) —— 整合分支

# 首先切换到目标分支(例如 master)
git checkout master

# 将另一个分支(例如 feature)合并到当前分支
git merge feature

# 合并时创建合并提交(非快进模式)
git merge --no-ff feature

合并类型:

快进合并(Fast-forward):目标分支直接是源分支的后继,指针直接移动。

Before:  master → C1 → C2
         feature → C3 (基于C2)

After (fast-forward): master → C1 → C2 → C3 (master 指向 C3)

三方合并(3-way merge):两个分支有分叉,Git 自动创建一个新的合并提交。

Before:      C1 → C2 → C4 (master)
              \
               → C3 (feature)

After:       C1 → C2 → C4 → C5 (merge commit)
              \         /
               → C3 ---

4.4 合并冲突解决
当两个分支修改了同一文件的同一行,或者一个分支删除了另一个分支修改的文件时,Git 无法自动合并,产生冲突。

示例冲突:

$ git merge feature
Auto-merging hello.py
CONFLICT (content): Merge conflict in hello.py
Automatic merge failed; fix conflicts and then commit the result.

冲突标记:

<<<<<<< HEAD
print("Hello from master")
=======
print("Hello from feature")
>>>>>>> feature

解决步骤:

手动编辑冲突文件,删除标记,保留最终需要的代码

git add 标记为已解决

git commit 完成合并提交

# 使用工具解决冲突
git mergetool   # 会打开配置的合并工具(如 vimdiff, kdiff3)

# 取消本次合并(回到合并前状态)
git merge --abort

模拟冲突场景:

# 创建并切换到 feature 分支
git checkout -b feature
echo "Feature line" > test.txt
git add test.txt && git commit -m "feature: add test.txt"

# 切回 master,修改同一文件
git checkout master
echo "Master line" > test.txt
git add test.txt && git commit -m "master: add test.txt"

# 合并冲突
git merge feature
# 解决冲突后提交

4.5 变基(Rebase) —— 另一种整合方式
git rebase 将一系列提交按顺序“复制”到另一个分支的顶端,使历史变成线性。

# 在 feature 分支上执行
git checkout feature
git rebase master

# 效果:将 feature 分支中从 master 分叉后的所有提交,应用到 master 的最新提交之后

合并前(分叉):

          C1 --- C2 (master)
           \
            C3 --- C4 (feature)

执行 git rebase master 后:

C1 --- C2 (master)
          \
           C3' --- C4' (feature)   # C3' 和 C4' 是新的提交对象

然后切换到 master 执行 fast-forward 合并:

git checkout master
git merge feature   # 现在是快进合并

变基与合并的对比:
image.png
黄金法则:不要对已经推送到远程仓库的分支执行 rebase! 否则会导致他人基于旧分支的工作混乱。

4.6 交互式变基(Interactive Rebase) —— 修改历史

# 对最近 3 个提交进行交互式变基
git rebase -i HEAD~3

会打开编辑器,列出提交列表,你可以对每个提交执行操作:

pick 7c6a5b8 Add login feature
pick 3a7c8f9 Fix typo in login
pick 2b9d4e1 Add logout feature

# Rebase 2b9d4e1..7c6a5b8 onto 2b9d4e1
#
# Commands:
# p, pick = use commit
# r, reword = use commit, but edit the commit message
# e, edit = use commit, but stop for amending
# s, squash = use commit, but meld into previous commit
# f, fixup = like "squash", but discard this commit's log message
# d, drop = remove commit

常用操作:

squash:将当前提交合并到前一个提交

reword:修改提交信息

edit:修改提交内容(如添加遗漏文件)

drop:删除提交

示例:合并最后两个提交为一个

pick abc123 Add feature
squash def456 Fix typo

保存后,可以编辑合并后的提交信息。
来源:
http://aescc.cn/

目录
相关文章
|
2月前
|
测试技术 C++ Python
如何从零开发一个工业级的 SKILL
手把手教你搓个 Skill,亲测新手也能跑起来,实操党可以直接冲~
517 1
如何从零开发一个工业级的 SKILL
|
2月前
|
人工智能 数据挖掘 持续交付
为什么越来越多人开始关注OPC一人公司?
AI时代兴起OPC一人公司:单人+AI智能体+协作网络,实现轻量化闭环创业。它超越个体户与自由职业,强调系统化交付与能力升级。OPC中国聚焦人才生态建设,“智能体来了”专注能力培养,共推AI原生新范式。(239字)
|
SQL 前端开发 Java
SpringMVC系列(四)之SpringMVC实现文件上传和下载
SpringMVC系列(四)之SpringMVC实现文件上传和下载
|
2月前
|
IDE 数据可视化 开发工具
软件开发新手入门五大核心技能之版本控制工具(五)
教程来源 http://xgmoi.cn/ 本章系统讲解 Git 高级用法:.gitignore 精准忽略文件;stash 临时保存未完成修改;alias 自定义高效命令;submodule 管理外部依赖;grep/blame/bisect 深度调试;涵盖集中式、功能分支、Git Flow 等主流协作工作流;详解撤销提交、amend、cherry-pick 等高频问题解决方案;并介绍 GUI 工具与 VS Code 集成技巧。
168 0
|
2月前
|
存储 开发工具 数据库
软件开发新手入门五大核心技能之版本控制工具(四)
教程来源 http://ltglu.cn/ 本章详解 Git 远程协作与标签管理:涵盖远程仓库配置、克隆、推送/拉取、fetch、分支跟踪及冲突解决;并介绍轻量与附注标签的创建、查看、推送与删除,助力团队高效协同与版本精准标记。
213 0
|
2月前
|
缓存 搜索推荐 网络协议
软件开发新手入门五大核心技能之逻辑思维与问题排查(一)
教程来源 http://qeext.cn/ 程序员的核心生产力不是写代码,而是解决问题。本书揭示:80%工作时间用于理解代码、排查Bug。以逻辑三要素(概念、命题、推理)为根基,结合真值表、德摩根定律、逆向思维与MECE原则,系统训练问题分析与定位能力,助你告别“面向搜索引擎编程”。
221 0
|
2月前
|
人工智能 运维 JavaScript
OpenClaw落地手册 阿里云部署流程、Token Plan设置及大模型Skill配置详解
在AI智能体技术快速普及的当下,OpenClaw凭借开源免费、私有化部署、任务自动化执行、多平台适配等优势,成为个人办公、开发运维、团队协作场景中热门的智能代理工具。很多新手在接触这款工具时,最先遇到的难题就是完整部署流程不清晰,同时不清楚如何搭配Token Plan套餐管控调用成本,也不了解大模型专属Skill技能模块的接入与配置方法,导致部署完成后无法发挥工具全部能力。
385 0
|
2月前
|
数据采集 人工智能 JSON
打通货源数据:1688 商品详情 API 赋能小龙虾 AI 店铺复盘
后端工程师复盘小龙虾AI智能体项目:基于1688官方商品详情API(1688.item.get),攻克签名鉴权、限流风控、价格/规格不统一、权限脱敏等难题,实现批发价、库存、资质等B2B核心数据的稳定采集、清洗与结构化建模,赋能AI智能选品、定价与自动铺货。
|
2月前
|
安全 开发工具 git
软件开发新手入门五大核心技能之版本控制工具(二)
教程来源 http://sdfxgc.cn/ 本章详解Git单人开发核心操作:涵盖仓库创建(init/clone)、文件三状态管理(未跟踪→已暂存→已提交)、status/diff/log实用技巧,以及安全撤销与精准回退(reset/amend/restore/reflog),助你夯实版本控制基础。
203 0

热门文章

最新文章