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

简介: 教程来源 http://xgmoi.cn/ 本章系统讲解 Git 高级用法:.gitignore 精准忽略文件;stash 临时保存未完成修改;alias 自定义高效命令;submodule 管理外部依赖;grep/blame/bisect 深度调试;涵盖集中式、功能分支、Git Flow 等主流协作工作流;详解撤销提交、amend、cherry-pick 等高频问题解决方案;并介绍 GUI 工具与 VS Code 集成技巧。

第七章 Git 高级技巧与实用配置

7.1 .gitignore —— 忽略不需要跟踪的文件
创建项目根目录下的 .gitignore 文件,列出 Git 应该忽略的文件或目录。

常见忽略内容:

编译产物(.class, .o, *.exe)

依赖目录(node_modules/, vendor/, pycache/)

环境配置文件(.env, *.local)

IDE 配置(.idea/, .vscode/, *.swp)

日志文件(*.log)

系统文件(.DS_Store, Thumbs.db)

示例 .gitignore 文件:

# 忽略所有 .log 文件
*.log

# 但跟踪这个特定的 .log 文件(例外规则)
!important.log

# 忽略 build 目录下的所有内容
build/

# 忽略根目录下的 temp 文件
/temp

# 忽略 doc 下所有 .txt 文件,但保留 notes.txt
doc/*.txt
!doc/notes.txt

# 忽略所有以 ~ 结尾的文件
*~

# 忽略 node_modules 目录
node_modules/

# 忽略环境变量文件
.env
.env.local

查看被忽略的文件:

git status --ignored

7.2 贮藏(Stash) —— 临时保存工作区
当你需要切换分支但当前修改未完成,不想提交时,使用 git stash。

# 贮藏当前修改(包括暂存区和工作区)
git stash

# 贮藏时添加描述
git stash push -m "WIP: login feature"

# 查看贮藏列表
git stash list
# stash@{0}: On master: WIP: login feature

# 应用最近的贮藏(保留贮藏记录)
git stash apply

# 应用特定贮藏
git stash apply stash@{1}

# 应用并删除贮藏
git stash pop

# 删除贮藏
git stash drop stash@{0}

# 清空所有贮藏
git stash clear

# 从贮藏创建分支
git stash branch new-branch stash@{0}

7.3 别名(Alias) —— 自定义命令

# 配置别名
git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.ci commit
git config --global alias.st status
git config --global alias.lg "log --oneline --graph --decorate --all"
git config --global alias.unstage "reset HEAD --"
git config --global alias.last "log -1 HEAD"
git config --global alias.tree "log --graph --pretty=oneline --abbrev-commit"

# 使用别名
git st          # 代替 git status
git lg          # 精美的日志图
git unstage file
git last

7.4 子模块 —— 管理外部依赖
子模块允许将一个 Git 仓库作为另一个仓库的子目录。

# 添加子模块
git submodule add https://github.com/jquery/jquery.git libs/jquery

# 克隆包含子模块的仓库(需要额外拉取)
git clone --recursive <url>

# 或在已克隆的仓库中初始化子模块
git submodule init
git submodule update

# 更新子模块到最新
git submodule update --remote

# 查看子模块状态
git submodule status

7.5 搜索与调试

# 按文本搜索历史(查找哪次提交引入了某行代码)
git grep "函数名" $(git rev-list --all)

# 使用 blame 查看每一行最后修改者
git blame hello.py

# 二分查找定位引入 bug 的提交(git bisect)
git bisect start
git bisect bad          # 当前版本有 bug
git bisect good v1.0    # v1.0 没有 bug
# Git 会切换到一个中间提交,测试后标记
git bisect good   # 如果这个版本正常
git bisect bad    # 如果这个版本有 bug
# 重复直到找到第一个 bad 提交
git bisect reset  # 退出二分模式

第八章 常见工作流与协作模式

8.1 集中式工作流(类似 SVN)
所有人向同一个中央仓库的 master 分支推送。适合小团队,但容易冲突。

8.2 功能分支工作流(Feature Branch Workflow)
每个新功能、修复都在单独分支上开发

完成后合并到 master(或 develop)

# 开发新功能
git checkout -b feature-awesome
# ... 开发,多次提交
git push -u origin feature-awesome
# 创建 Pull Request / Merge Request
# 代码审查通过后合并
git checkout master
git pull
git merge --no-ff feature-awesome
git push
git branch -d feature-awesome

8.3 Git Flow(经典分支模型)
包含长期分支:master(生产环境)、develop(开发主线),以及临时分支:feature/、release/、hotfix/*。

# 初始化 Git Flow(需要安装 git-flow)
git flow init

# 开始新功能
git flow feature start login

# 完成功能(合并到 develop)
git flow feature finish login

# 开始发布
git flow release start 1.0.0
# 更新版本号、文档
git flow release finish 1.0.0

8.4 GitHub Flow(简化版)
master 分支始终可部署

新功能从 master 拉分支,完成后提 PR

合并后立即部署

8.5 Fork & Pull Request(开源协作)
Fork 原仓库到自己账户

克隆自己的 fork

创建功能分支,提交修改

推送到自己的远程仓库

在原仓库上创建 Pull Request

# 添加上游仓库(原项目)
git remote add upstream https://github.com/original/repo.git

# 获取上游更新
git fetch upstream

# 将上游 master 合并到本地 master
git checkout master
git merge upstream/master

# 推送同步到自己的 fork
git push origin master

第九章 常见问题与解决方案

9.1 如何撤销已经 push 的提交?

# 方法1:回退本地并强制推送(会改写历史)
git reset --hard HEAD~1
git push --force-with-lease origin master

# 方法2:使用 git revert 创建反向提交(安全,不破坏历史)
git revert HEAD       # 撤销最近一次提交,生成新提交
git push origin master

9.2 忘记添加某个文件到上一次提交

git add forgotten.txt
git commit --amend --no-edit

9.3 提交信息写错了(未 push)

git commit --amend -m "新的正确信息"

9.4 误删分支,如何恢复?

# 找到被删除分支的最后一次提交哈希
git reflog

# 基于该哈希创建新分支
git branch recovered-branch <hash>

9.5 如何合并某个分支的特定提交(cherry-pick)?

# 切换到目标分支
git checkout master

# 将 feature 分支上的某次提交应用到当前分支
git cherry-pick <commit-hash>

9.6 如何清空工作区所有未跟踪文件?

# 查看哪些文件会被删除(dry-run)
git clean -n

# 删除未跟踪文件
git clean -f

# 同时删除未跟踪目录
git clean -fd

# 删除 .gitignore 忽略的文件也删(危险)
git clean -x

第十章 图形化工具与 IDE 集成

虽然建议新手先掌握命令行,但图形化工具能帮助可视化理解 Git。

10.1 常用 GUI 客户端
Git GUI(Git 自带):git gui 命令

GitK(历史查看):gitk

Sourcetree(Windows/Mac,免费)

GitKraken(跨平台,功能强大)

GitHub Desktop(简洁)

VS Code:内置 Git 支持,点击即可提交、推送、分支管理

10.2 VS Code 内置 Git 常用操作
源代码管理面板:查看更改,暂存,提交

分支切换:左下角分支图标

查看差异:点击文件即可

解决冲突:内联冲突编辑器

综合实战:基于 Git 的协作模拟
假设你和同事合作开发一个 Web 项目,任务分工:你开发“用户注册”,同事开发“用户登录”。

# 第一天:克隆项目
git clone https://github.com/company/webapp.git
cd webapp

# 创建你的功能分支
git checkout -b feature-register

# 添加注册功能文件
echo "<form>注册表单</form>" > register.html
git add register.html
git commit -m "feat: 添加注册页面基础结构"

# 同事也创建了他的分支
git checkout -b feature-login   # 在他的电脑上

# 你继续完善注册功能
echo "后端验证逻辑" >> register.html
git commit -am "feat: 注册表单后端验证"

# 同事提交他的工作
echo "登录框" > login.html
git add login.html
git commit -m "feat: 添加登录页面"

# 同事推送他的分支
git push origin feature-login

# 你推送你的分支
git push origin feature-register

# 在 GitHub/GitLab 上分别创建 Pull Request 到 main 分支
# 代码审查后,合并两个 PR

# 第二天,你需要基于最新的 main 继续工作
git checkout main
git pull origin main   # 获取别人合并后的最新代码

# 删除本地已合并的功能分支
git branch -d feature-register

# 创建新的功能分支
git checkout -b feature-profile

来源:
http://amwtm.cn/

目录
相关文章
|
1月前
|
安全 程序员 开发工具
软件开发新手入门五大核心技能之版本控制工具(一)
教程来源 http://mykunlian.com/ 版本控制是程序员的“后悔药”与协同桥梁:记录每一次修改,支持随时回溯、安全实验、并行分支与多人协作。Git凭借分布式架构成为行业标准,本文带你从零掌握核心技能。
153 0
|
1月前
|
安全 开发工具 git
软件开发新手入门五大核心技能之版本控制工具(二)
教程来源 http://sdfxgc.cn/ 本章详解Git单人开发核心操作:涵盖仓库创建(init/clone)、文件三状态管理(未跟踪→已暂存→已提交)、status/diff/log实用技巧,以及安全撤销与精准回退(reset/amend/restore/reflog),助你夯实版本控制基础。
161 0
|
1月前
|
SQL 网络协议 NoSQL
软件开发新手入门五大核心技能之计算机基础常识(五)
教程来源 http://vbzcj.cn/ 本章系统讲解网络与数据库核心知识:涵盖OSI/TCP/IP模型、IP/端口、TCP三次握手/四次挥手、HTTP协议、DNS解析;以及SQL基础、索引优化、ACID事务、NoSQL(如Redis)等,理论结合Python实战示例。
|
1月前
|
XML 存储 安全
1.WebDAV协议简介
WebDAV(Web-basedDistributedAuthoringandVersioning)基于HTTP/1.1扩展,提供了文件管理功能:创建/删除目录、文件上传/下载、锁定(避免冲突)、属性管理。
279 0
|
1月前
|
JSON 运维 PHP
PHP在命令行应用开发中的深度实践(CLI模式)
PHP不仅用于Web开发,其命令行(CLI)模式同样强大。许多开发者不知道的是,Laravel的artisan命令行工具就是PHPCLI应用的典范
108 4
|
1月前
|
存储 自然语言处理 算法
软件开发新手入门五大核心技能之计算机基础常识(三)
教程来源 http://lemci.cn/ 本章系统讲解数据结构基础:数组(连续存储、O(1)访问)、链表(指针链接、O(1)增删)、栈(LIFO)、队列(FIFO)、哈希表(O(1)查找)、树与图(层次/网络关系),辅以多语言代码实例,揭示高效组织数据的核心逻辑。
|
1月前
|
传感器 JavaScript 芯片
24V转5V/3.3V降压芯片,LDO和DC-DC如何选择
本指南详解24V转5V/3.3V电源方案选型,涵盖PW系列LDO(如PW6206)与DC-DC芯片(PW2312/PW2330等),针对大压差下的效率、散热、噪声、成本等核心挑战,提供“DC-DC主降+LDO后稳”等三级架构建议,助力高效可靠设计。
|
SQL 大数据 开发工具
大数据Hive窗口函数应用实例 1
大数据Hive窗口函数应用实例
356 0