运城市网站建设_网站建设公司_产品经理_seo优化
2026/1/9 1:23:40 网站建设 项目流程

文章目录

  • 目录
    • 引言
    • 环境准备
    • 一、仓库初始化与首次提交
      • 1.1 初始化 Git 仓库
      • 1.2 创建 .gitignore 文件
      • 1.3 首次提交
      • 技术解析
    • 二、分支创建与多轮小步提交
      • 2.1 切出 feature 分支
      • 2.2 2-3 次小步提交
        • 第一次提交:新增功能基础文件
        • 第二次提交:实现核心逻辑
        • 第三次提交:修复参数校验问题
      • 技术解析
    • 三、分支合并(merge 选型及理由)
      • 3.1 合并到 main 分支
      • 3.2 选型理由(merge vs rebase)
    • 四、制造并解决合并冲突
      • 4.1 制造冲突
        • 步骤1:feature 分支修改目标行
        • 步骤2:main 分支修改同一行
        • 步骤3:触发合并冲突
      • 4.2 解决冲突
        • 步骤1:查看冲突文件
        • 步骤2:手动解决冲突
        • 步骤3:完成合并提交
      • 技术解析
    • 五、版本回滚(git revert 演示)
      • 5.1 查看提交历史
      • 5.2 执行 git revert
      • 5.3 补充:cherry-pick 迁移修复提交
      • 技术解析
    • 六、GitHub 平台适配说明
    • 总结
      • 核心要点回顾

目录

引言

若对您有帮助的话,请点赞收藏加关注哦,您的关注是我持续创作的动力!有问题请私信或联系邮箱:funian.gm@gmail.com

Git 作为分布式版本控制系统,是开发者日常协作、代码版本管理的核心工具。本文将通过空目录实操的方式,按步骤演示 Git 最核心的基础操作(初始化、分支管理、提交、合并、冲突解决、版本回滚),并结合技术解析说明背后的设计逻辑,帮助新手快速掌握 Git 核心用法。

环境准备

本次演示基于 Linux/macOS 终端(Windows 可使用 Git Bash),先创建空目录作为演示仓库:

# 创建并进入空目录mkdirgit-demo&&cdgit-demo

一、仓库初始化与首次提交

1.1 初始化 Git 仓库

git init是创建 Git 仓库的第一步,会在当前目录生成隐藏的.git文件夹(仓库核心配置/版本记录都存于此):

# 初始化仓库gitinit# 验证:查看.git目录(Linux/macOS)ls-la|grep.git

输出示例:drwxr-xr-x 9 user staff 288 Jan 9 10:00 .git,说明初始化成功。

1.2 创建 .gitignore 文件

.gitignore用于指定 Git 需忽略的文件/目录(如日志、缓存、IDE 配置等),避免无关文件提交到仓库。
创建并编辑.gitignore

# 创建.gitignore文件touch.gitignore# 编辑内容(示例:忽略常见无用文件)cat>.gitignore<<EOF # 日志文件 *.log # 缓存目录 node_modules/ # IDE配置(VSCode) .vscode/ # 系统临时文件 .DS_Store EOF

1.3 首次提交

提交是 Git 保存版本的核心操作,需遵循清晰的提交信息规范(推荐 Conventional Commits 规范:类型+描述):

# 将.gitignore加入暂存区gitadd.gitignore# 首次提交(提交信息清晰描述操作)gitcommit -m"feat: 初始化仓库,添加.gitignore忽略规则"

提交成功后,可通过git log查看提交记录:

gitlog --oneline# 输出示例:f876541 (HEAD -> main) feat: 初始化仓库,添加.gitignore忽略规则

技术解析

  • git init:初始化本地仓库,生成.git目录(包含 objects、refs、config 等核心文件);
  • .gitignore规则:支持通配符(*)、目录(/)、注释(#),优先级为「本地.gitignore > 全局.gitignore > .git/info/exclude」;
  • 提交信息规范:类型(可选作用域): 描述(如 feat/fix/docs/style/refactor/test/chore),便于追溯和自动化生成 CHANGELOG。

二、分支创建与多轮小步提交

2.1 切出 feature 分支

Git 分支是「轻量级指针」,feature/<topic>是行业通用的功能分支命名规范(<topic>为功能主题),用于隔离功能开发:

# 从main分支创建并切换到feature/user-login分支(推荐新命令git switch)gitswitch -c feature/user-login# 等价于旧命令:git checkout -b feature/user-login# 验证分支状态gitbranch# 输出示例:* feature/user-login# main

2.2 2-3 次小步提交

「小步提交」是 Git 最佳实践:每次提交只完成一个小功能/修复,便于追溯、回滚和代码评审。

第一次提交:新增功能基础文件
# 创建用户登录功能文件touchuser.js# 写入基础代码echo"// 用户登录模块">user.js# 暂存+提交gitadduser.jsgitcommit -m"feat: 新增用户登录模块基础文件"
第二次提交:实现核心逻辑
# 修改user.js,添加登录函数cat>>user.js<<EOF // 登录函数 function login(username, password) { return { code: 200, msg: "登录成功" }; } EOF# 提交gitcommit -am"feat: 实现用户登录核心函数"# -am 等价于:git add + git commit(仅适用于已追踪文件)
第三次提交:修复参数校验问题
# 修改user.js,补充参数校验sed-i'''3i\ if (!username || !password) return { code: 400, msg: "参数不能为空" };\ 'user.js# 提交gitcommit -am"fix: 补充登录参数非空校验"

技术解析

  • 分支本质:refs/heads/目录下的文本文件,存储对应提交的哈希值;
  • 小步提交优势:
    1. 单个提交逻辑清晰,便于 Code Review;
    2. 回滚时仅影响局部功能,风险可控;
    3. 多人协作时减少冲突概率。

三、分支合并(merge 选型及理由)

3.1 合并到 main 分支

合并分支有两种核心方式:mergerebase,本次选择merge(更适合新手+保留分支历史):

# 切换回main分支gitswitch main# 合并feature/user-login到maingitmerge feature/user-login --no-ff# --no-ff:强制创建合并提交(保留分支历史,便于追溯)

合并成功后,git log --graph --oneline可查看分支合并图谱:

* a1b2c3d (HEAD -> main) Merge branch 'feature/user-login' |\ | * e4f5g6h (feature/user-login) fix: 补充登录参数非空校验 | * i7j8k9l feat: 实现用户登录核心函数 | * m0n1o2p feat: 新增用户登录模块基础文件 |/ * f876541 feat: 初始化仓库,添加.gitignore忽略规则

3.2 选型理由(merge vs rebase)

操作特点适用场景
merge保留分支历史,生成合并提交,无代码篡改团队协作、公共分支(main/develop)
rebase线性历史,无合并提交,重写提交哈希个人开发分支、功能分支合入前整理

本次选 merge 的核心原因

  1. 新手易理解:合并记录清晰,可通过git log直观看到功能分支的所有提交;
  2. 无风险:rebase会改写提交历史,若分支已推送到远程,可能导致协作冲突,merge更安全;
  3. 可追溯:保留「功能开发-合并」的完整上下文,便于后续问题定位。

四、制造并解决合并冲突

4.1 制造冲突

冲突产生的核心原因:同一文件的同一行被不同分支修改

步骤1:feature 分支修改目标行
# 切回feature分支,修改user.js第5行(登录提示)gitswitch feature/user-login# 修改登录提示文案sed-i'''s/msg: "登录成功"/msg: "登录成功,欢迎回来"/'user.js# 提交修改gitcommit -am"feat: 优化登录成功提示文案"
步骤2:main 分支修改同一行
# 切回main分支,修改同一行(不同文案)gitswitch mainsed-i'''s/msg: "登录成功"/msg: "登录成功,您的账号安全有效"/'user.js# 提交修改gitcommit -am"feat: 调整登录成功提示语"
步骤3:触发合并冲突
# 合并feature分支到main,触发冲突gitmerge feature/user-login

终端会提示冲突:

Auto-merging user.js CONFLICT (content): Merge conflict in user.js Automatic merge failed; fix conflicts and then commit the result.

4.2 解决冲突

步骤1:查看冲突文件
gitstatus# 输出示例:# both modified: user.js
步骤2:手动解决冲突

打开user.js,冲突区域会被标记:

// 用户登录模块// 登录函数functionlogin(username,password){if(!username||!password)return{code:400,msg:"参数不能为空"};return{code:200,msg:"登录成功"};<<<<<<<HEADreturn{code:200,msg:"登录成功,您的账号安全有效"};=======return{code:200,msg:"登录成功,欢迎回来"};>>>>>>>feature/user-login}
  • <<<<<<< HEAD:main 分支的代码;
  • =======:冲突分割线;
  • >>>>>>> feature/user-login:feature 分支的代码。

手动修改为最终想要的内容(比如合并两者的优点):

// 用户登录模块// 登录函数functionlogin(username,password){if(!username||!password)return{code:400,msg:"参数不能为空"};return{code:200,msg:"登录成功,欢迎回来!您的账号安全有效"};}
步骤3:完成合并提交
# 标记冲突文件已解决gitadduser.js# 完成合并提交gitcommit -m"fix: 解决user.js登录提示文案合并冲突"

技术解析

  • 冲突本质:Git 无法自动判断同一行代码的优先级,需人工介入;
  • 冲突解决核心:保留正确代码,删除冲突标记(<<<<<<</=======/>>>>>>>);
  • 避免冲突:频繁拉取远程分支、小步提交、按模块分工开发。

五、版本回滚(git revert 演示)

Git 回滚有两种核心方式:git revert(安全,推荐)和git reset(危险,不建议公共分支使用)。

5.1 查看提交历史

gitlog --oneline# 输出示例(假设需回滚“调整登录提示语”的提交):# 9876543 (HEAD -> main) fix: 解决user.js登录提示文案合并冲突# 8765432 feat: 调整登录成功提示语# 7654321 Merge branch 'feature/user-login'# ...

5.2 执行 git revert

git revert会创建一个反向提交,撤销指定提交的修改,且保留原提交历史(无数据丢失):

# 回滚“调整登录成功提示语”的提交(哈希为8765432)gitrevert8765432

若有冲突,按第四步的方法解决后执行git commit即可。

5.3 补充:cherry-pick 迁移修复提交

git cherry-pick用于「挑选单个提交」迁移到其他分支(比如将 feature 分支的修复提交迁移到 main):

# 查看feature分支的修复提交哈希gitlog feature/user-login --oneline# 输出示例:e4f5g6h fix: 补充登录参数非空校验# 切回main分支,迁移该提交gitswitch maingitcherry-pick e4f5g6h

技术解析

回滚方式原理适用场景风险
git revert创建反向提交,撤销修改公共分支(main/develop)
git reset移动HEAD指针,删除提交本地私有分支、未推送提交高(数据丢失)
git cherry-pick复制单个提交到当前分支跨分支迁移修复/小功能提交低(仅复制提交)

六、GitHub 平台适配说明

以上操作均为本地操作,若需推送到 GitHub,补充以下步骤:

# 1. 在GitHub创建空仓库,复制仓库地址# 2. 添加远程仓库gitremoteaddorigin https://github.com/你的用户名/git-demo.git# 3. 推送到GitHub(-u 绑定本地main到远程origin/main)gitpush -u origin main# 4. 推送feature分支到远程gitpush origin feature/user-login

总结

核心要点回顾

  1. 仓库初始化git init生成.git目录,.gitignore 规范忽略文件,首次提交需清晰描述;
  2. 分支管理feature/<topic>命名规范,小步提交便于追溯,合并优先选merge(保留历史);
  3. 冲突解决:冲突源于同一行多分支修改,手动删除冲突标记并保留正确代码,git add标记解决;
  4. 版本回滚:公共分支用git revert(安全),私有分支可试用git reset,跨分支迁移提交用git cherry-pick

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询