目录
一、概念
1.1 概念
1.2 核心功能
二、代码管理
2.1 基础Git命令
2.2 Git仓库管理
2.3 GitLab核心工作流
2.3.1 分支策略
2.3.2 Merge Request(MR)/ Pull Request(PR)
2.4 .gitignore文件
三、Git常用命令
3.1 仓库初始化与克隆
3.2 基础工作流(最常用)
3.3 分支操作
3.4 查看历史与比较差异
3.5 远程协作
3.6 撤销与回退
一、概念
1.1 概念
一个功能强大的就是GitLab DevOps 平台,它远不止于一个简单的代码托管工具,旨在为软件开发团队提供从项目规划、代码管理到构建、测试、部署和监控的全流程支持。本文主要讲的是它的代码托管功能。
下面展示了 GitLab 与另一个流行的代码托管平台 GitHub 的核心区别:
| 特性对比 | GitLab | GitHub |
|---|---|---|
| 核心定位 | 一体化的 DevOps 平台 | 侧重于代码托管和开源社区 |
| 私有仓库 | 免费支持私有项目,适合企业内部启用 | 私有项目通常得付费计划 |
| 部署方式 | 支持 SaaS (GitLab.com) 和 自行部署,灵活性高 | 主要以 SaaS 服务为主 |
| CI/CD 功能 | 内置强大的持续集成/持续部署 (CI/CD) 应用 | 主要通过 GitHub Actions(需额外配置)或第三方程序实现 |
| 文化侧重 | 更注重企业内部的开发流程和权限管控 | 拥有强大的开源社区文化和协作生态 |
1.2 核心功能
代码管理与版本控制:基于 Git,提供完整的代码仓库管理,包括分支管理、合并请求(Merge Request)、代码审查等,确保代码变更清晰可控。
CI/CD(持续集成与持续部署):这是 GitLab 的王牌功能。通过项目根目录下的一个
.gitlab-ci.yml配置文件,即可自动化完成软件的构建、测试和部署流程,实现快速、可靠的交付。项目管理与协作:内置了问题(Issue)跟踪、Wiki 文档、看板(Kanban)等工具,帮助团队高效管理任务和知识。
安全与权限管理:提供精细化的权限控制(从访客到维护者多个角色),并集成了安全扫描应用(如 SAST、DAST),能在开发早期发现漏洞。
二、代码管理
2.1 基础Git命令
clone:克隆远程仓库。add/commit:提交更改到本地仓库。push/pull/fetch:与远程仓库同步。branch/checkout:分支管理。merge/rebase:合并代码(理解两者的区别和适用场景)。status/log/diff:查看状态、历史和差异。
2.2 Git仓库管理
仓库类型:
私有仓库:GitLab 的显著优势。免费版即可创建无限量的私有仓库,非常适合企业内部项目。
内部仓库:对登录用户可见,适合跨部门协作。
公开仓库:对外部世界完全可见,适合开源项目。
分支保护:
这是保证主分支(如
main或master)代码质量的关键。保护规则:可以设置哪些角色(如
Maintainer,Developer)拥有推送(Push)、合并(Merge)到特定分支的权限。合并前要求:
至少 X 个批准:要求合并请求必须获得指定数量的核心成员批准。
流水线必须成功:要求关联的 CI/CD 流水线必须运行成功,否则无法合并。
讨论必须解决:要求合并请求中的所有评论和线程都必须被标记为“已解决”。
文件锁:
对于二进制文件(如图片、文档)或关键配置文件,可以将其锁定,防止多人同时编辑导致冲突。
2.3 GitLab核心工作流
2.3.1 分支策略
主分支:
main或master,保持稳定,随时可部署。功能分支:从
main拉取,用于新功能开发,命名如feature/user-authentication。发布分支:从
main拉取,用于准备发布,命名如release/1.2.0,只做Bug修复。热修复分支:从
main拉取,用于生产环境紧急修复,命名如hotfix/critical-bug。GitFlow:一个经典的分支模型,GitLab有很好的帮助。了解其流程。
2.3.2 Merge Request(MR)/ Pull Request(PR)
核心价值:代码审查、知识共享、质量保证。
流程:
在功能分支上开发完成。
在GitLab上创建一个MR,请求将你的分支合并到
main分支。指定审查者:让你的同事或Tech Lead审查代码。
讨论和修改:根据审查意见在本地修改,随后推送到同一个功能分支,MR会自动更新。
CI/CD流水线通过:确保你的代码通过所有自动化测试和检查。
合并:由代码审查者或你自己(如果允许)完成合并。
最佳实践:
写清晰的MR标题和描述,说明改了什么,为什么改。
链接相关的问题。
应用“Squash commits”选项保持提交历史整洁。
2.4 .gitignore文件
这是 Java 工程的必备文件。它告诉 Git 忽略哪些文件(如编译生成的 target/ 目录、IDE 配置文件 .idea/、.class 文件等)。一个配置正确的 .gitignore 可以保持仓库的清洁。
三、Git常用命令
3.1 仓库初始化与克隆
这些命令用于开始一个方案,要么在本地创建新仓库,要么获取现有的远程仓库。
| 命令 | 说明 | 常用选项与示例 | 应用场景 |
|---|---|---|---|
git init | 将当前目录初始化为一个新的 Git 仓库。 | git init | 在本地创建一个全新的项目。 |
git clone | 克隆(下载)一个远程仓库到本地。 | git clone <repo_url>git clone <repo_url> <目录名> | 从 GitLab/GitHub 上获取项目代码,开始工作。 |
3.2 基础工作流(最常用)
日常制作中使用最频繁的命令,对应着 Git 的基本工作流程:修改 -> 暂存 -> 提交。就是这
| 命令 | 说明 | 常用选项与示例 | 应用场景 |
|---|---|---|---|
git status | 查看工作区和暂存区的状态(哪些文件被修改、哪些已暂存)。 | git statusgit status -s (简洁模式) | 随时使用,查看当前更改状态。 |
git add | 将工作区的修改添加到暂存区。 | git add <文件名>git add . (添加所有更改)git add -p (交互式暂存,推荐) | 准备提交前,将相关的更改打包。 |
git commit | 将暂存区的内容提交到本地仓库,创建一个新的版本记录。 | git commit -m "提交信息"git commit -am "提交信息" (跳过git add,只对已跟踪文件有效) | 完成一个小的功能点或修复后,保存工作进度。 |
git restore(或 git checkout --) | 撤销工作区的修改,恢复到最近一次 git commit 或 git add 时的状态。 | git restore <文件名>git restore . (撤销所有未暂存的修改) | 危险!丢弃尚未暂存的本地修改。 |
git restore --staged(或 git reset HEAD) | 将文件从暂存区移回工作区,取消暂存。 | git restore --staged <文件名> | 误将不需要的文件git add了,可以将其移出暂存区。 |
git add -p(交互式暂存):这是一个高级但极其有用的功能。它允许检查每个代码块(hunk),并决定是否将其暂存。这可以协助创建逻辑清晰、小而专注的提交,而不是一个大的“各种修改”的提交。
3.3 分支操作
| 命令 | 说明 | 常用选项与示例 | 应用场景 |
|---|---|---|---|
git branch | 查看、创建、删除分支。 | git branch (列出所有本地分支)git branch <分支名> (创建新分支)git branch -d <分支名> (删除已合并的分支) | 分支管理。 |
git checkout | 切换分支或恢复工作区文件。 | git checkout <分支名> (切换分支)git checkout -b <新分支名> (创建并切换到新分支) | 切换工作上下文,开始新功能开发。 |
git switch(较新版本) | 专门用于切换分支,比 git checkout 意图更清晰。 | git switch <分支名>git switch -c <新分支名> (创建并切换) | 推荐用它来替代 git checkout <分支名>。 |
git merge | 将指定分支的修改合并到当前分支。 | git merge <分支名> | 通常用于将功能分支合并到主分支(如 main)。 |
git rebase | 将当前分支的提交“重新播放”到目标分支上,形成线性的提交历史。 | git rebase <目标分支> | 整理提交历史,使历史更清晰。注意:不要在公共分支上使用! |
3.4 查看历史与比较差异
| 命令 | 说明 | 常用选项与示例 | 应用场景 |
|---|---|---|---|
git log | 查看提交历史。 | git loggit log --oneline (简洁模式)git log --graph (图形化显示) | 查看谁在什么时候做了什么。 |
git diff | 显示差异。 | git diff (工作区 vs 暂存区)git diff --staged (暂存区 vs 最新提交)git diff <分支A> <分支B> | 查看代码的具体改动内容。 |
3.5 远程协作
与远程仓库(如 GitLab)交互的命令。
| 命令 | 说明 | 常用选项与示例 | 应用场景 |
|---|---|---|---|
git remote | 管理远程仓库地址。 | git remote -v (查看远程地址)git remote add origin <url> (添加远程仓库) | 通常克隆后自动设置好 origin。 |
git fetch | 从远程仓库下载最新数据,但不合并到工作区。 | git fetch | 安全地查看同事是否有新提交。 |
git pull | 从远程仓库下载并合并到当前分支。 | git pull (相当于 git fetch + git merge)git pull --rebase (相当于 git fetch + git rebase) | 更新本地代码,获取团队最新进展。 |
git push | 将本地提交推送到远程仓库。 | git push -u origin <分支名> (首次推送分支,建立关联)git push (后续推送) | 分享你的代码,将本地提交推送到 GitLab。 |
3.6 撤销与回退
| 命令 | 说明 | 常用选项与示例 | 应用场景 |
|---|---|---|---|
git commit --amend | 修补最新提交。可以修改提交信息或加入漏掉的文档。 | git commit --amend -m "新信息" | 刚提交完发现少了个文件或提交信息写错了。 |
git reset | 回退到指定的提交,有三种模式。 | git reset --soft <commit_id> (移动HEAD,保留暂存区和工作区)git reset --mixed <commit_id> (默认,移动HEAD,保留工作区)git reset --hard <commit_id> (危险!彻底回退,丢弃所有更改) | 撤销本地提交。谨慎使用 --hard! |
git revert | 创建一个新的提交来撤销指定提交的更改。 | git revert <commit_id> | 安全地撤销公共提交(如已推送到GitLab的提交),因为它不重写历史。 |
