Git下载链接Git - Windows 安装Git图形化工具推荐 SourceTreeGit 基础概念版本控制系统作用记录文件历史变化便于回溯、协作、分支开发。分类集中式SVN所有版本数据存储在中央服务器。分布式Git每个开发者本地都有完整仓库可离线操作。Git 的核心特点快照流非差异比较每次提交保存整个项目的快照文件指针而非文件差异。几乎所有操作本地执行速度快可离线工作。数据完整性所有数据在存储前计算校验和SHA-1 哈希。文件生命周期与三个区域工作区Working Directory本地文件系统可编辑。暂存区Staging Area / Index临时保存下次要提交的修改。本地仓库Local RepositoryGit 保存所有提交数据的地方.git目录。远程仓库Remote Repository托管在服务器上的共享仓库。文件状态未跟踪Untracked新文件Git 不知道。已修改Modified已跟踪的文件被修改但未放入暂存区。已暂存Staged修改已放入暂存区等待提交。已提交Committed数据安全保存在本地仓库中。分支的基本概念分支一个独立的开发线允许你在不影响主线或其他分支的情况下进行修改。主分支通常是master或main代表稳定、可发布的代码。开发分支如develop集成各个功能的最新开发成果经过测试后可合并到主分支。功能分支feature branch从develop或main拉出用于开发某个特定功能完成后合并回原分支。发布分支release branch用于准备新版本的发布可以在其上做最后的 bug 修复和版本号更新。热修复分支hotfix branch从main拉出用于紧急修复线上问题修复后同时合并到main和develop。分支管理策略Git Flow经典模型Git Flow 是由 Vincent Driessen 在 2010 年提出的一种基于 Git 的分支管理模型。它定义了一套严谨的分支命名规范和工作流程旨在为大型项目的版本发布、功能开发和缺陷修复提供清晰的协作框架。尽管近年来出现了一些更轻量的模型如 GitHub Flow、GitLab FlowGit Flow 仍然是许多企业级项目广泛采用的标准模型。核心分支Git Flow 模型包含两类长期存在的分支主分支和三类短期存在的分支辅助分支。1. 主分支master或main 该分支始终反映生产环境的代码状态。每一次提交到master的版本都应当是可部署的、稳定的。通常该分支受保护禁止直接推送代码只能通过合并其他分支如release或hotfix来更新。develop该分支是主开发分支包含下一个版本发布所需的所有功能。它集成自各个功能分支feature的代码代表了最新的开发成果。当develop分支的代码足够稳定且达到发布条件时会基于它创建release分支。2. 辅助分支辅助分支具有固定的命名模式、明确的用途和有限的生命周期完成使命后应当被删除。feature/*分支来源develop合并目标develop命名示例feature/user-authentication、feature/payment-gateway作用用于开发一个新功能或模块。开发者从最新的develop分支检出feature分支在分支上完成功能开发、自测最后合并回develop。合并后该分支可删除。release/*分支来源develop合并目标master和develop命名示例release/1.2.0、release/2024-03作用准备新版本发布。当develop分支积累了足够的下一个版本功能并且需要冻结功能、进行最终测试、修复小缺陷、更新版本号或生成文档时从develop创建release分支。在release分支上不再添加新功能只进行 bug 修复和发布准备工作。完成后该分支需要同时合并到master打上版本标签和develop以便后续开发包含修复。hotfix/*分支来源master合并目标master和develop命名示例hotfix/1.2.1、hotfix/critical-security-patch作用用于紧急修复生产环境的严重缺陷。直接从当前生产版本master分支的某个标签检出hotfix分支修复问题后合并回master打上新的补丁标签并合并回develop或当前最新的release分支以确保修复被纳入后续版本。工作流程示例日常开发 开发者基于最新的develop创建feature/xxx分支进行功能开发。bashgit checkout developgit pullgit checkout -b feature/new-login功能完成 功能开发并自测通过后将feature分支合并回develop并删除该分支。bashgit checkout developgit merge --no-ff feature/new-logingit branch -d feature/new-login准备发布 当develop达到发布条件例如计划发布 1.2.0 版本时创建release/1.2.0分支。bashgit checkout developgit checkout -b release/1.2.0# 在此分支上调整版本号、修复测试中发现的小问题完成发布 测试通过后将release分支合并到master并打标签同时合并回develop。bashgit checkout mastergit merge --no-ff release/1.2.0git tag -a 1.2.0 -m Release version 1.2.0git checkout developgit merge --no-ff release/1.2.0git branch -d release/1.2.0紧急修复 若生产环境发现严重 bug如 1.2.0 版本从对应标签创建hotfix/1.2.1分支。bashgit checkout mastergit checkout -b hotfix/1.2.1# 修复问题、提交git checkout mastergit merge --no-ff hotfix/1.2.1git tag -a 1.2.1 -m Hotfix 1.2.1git checkout developgit merge --no-ff hotfix/1.2.1git branch -d hotfix/1.2.1优点与适用场景优点结构清晰分支类型和生命周期明确适合大型团队协作。并行开发支持允许多个功能独立开发互不干扰。发布管理规范通过release分支隔离发布准备工作避免影响开发进度。紧急修复流程hotfix分支确保生产缺陷能快速修复并同步回主线。适用场景需要维护多个版本、有固定发布周期的项目如企业级应用、商业软件。团队规模较大需要严格权限控制和流程管理的环境。对版本稳定性要求高需要清晰记录每个发布版本及其修复。缺点分支较多操作略复杂。GitHub Flow简化模型GitHub Flow 是由 GitHub 团队提出并实践的一种轻量级分支管理模型。与 Git Flow 的严谨复杂不同GitHub Flow 追求极简旨在适配持续交付和持续部署的敏捷开发流程。它仅保留一条长期分支通常是main或master所有功能开发、缺陷修复都通过 Pull Request 进行协作并鼓励频繁部署。核心思想main分支始终保持可部署状态 任何时候从main分支获取的代码都应当是可工作的、可直接部署到生产环境的。因此只有经过充分测试和审查的代码才能合并到main。一切从main开始最终回归main任何新功能、修复或改进都从最新的main分支创建新分支工作完成后通过 Pull Request 请求合并回main。使用 Pull Request 进行协作 Pull Request 不仅是代码合并的请求更是代码审查、讨论、自动构建和测试的载体。团队成员可以在 PR 中审查代码、提出修改建议并通过 CI持续集成验证代码质量。部署后可随时发布 GitHub Flow 鼓励频繁部署通常合并到main后即触发自动部署到生产环境或预发布环境。这使得功能可以快速上线缩短了交付周期。工作流程从main创建分支bashgit checkout maingit pullgit checkout -b feature/new-feature在分支上进行开发 在本地分支上提交代码可以多次提交并定期推送到远程同名分支。发起 Pull Request 当分支准备就绪或希望获得早期反馈时在 GitHub 上创建 Pull Request请求将feature/new-feature分支合并到main。讨论与代码审查 团队成员在 PR 中对代码进行审查提出意见。作者可以根据反馈修改代码并推送更新PR 会自动更新。自动化检查 通过 CI 工具如 GitHub Actions自动运行测试、构建、代码规范检查等。只有所有检查通过PR 才具备合并条件。部署验证可选 许多团队会在合并前将分支部署到预发布环境进行进一步验证。GitHub 允许通过部署集成直接在 PR 中查看部署状态。合并到main审查通过、检查成功且无冲突后合并 Pull Request。合并后分支通常被删除。立即部署 合并到main后通常会自动触发生产环境的部署。如果是通过 CI/CD 流水线main的新提交会被构建并部署。优点简单直观分支规则极少新手容易上手。与 CI/CD 无缝集成适合频繁部署符合 DevOps 理念。强调代码审查Pull Request 是核心有助于提升代码质量。减少分支管理负担没有长期存在的辅助分支如develop、release、hotfix简化了流程。缺点缺乏版本发布隔离没有专门的release分支当需要同时维护多个线上版本如旧版本 bug 修复时处理起来较为麻烦。对团队纪律要求高要求main始终保持可部署状态若合并前测试不充分可能导致线上问题。不适合固定周期发布对于有严格发布窗口和版本规划的项目如传统企业软件GitHub Flow 可能过于灵活。适用场景持续部署的 Web 应用如 SaaS 服务、API 后端功能可以随时上线。开源项目通过 Pull Request 贡献代码清晰且易于协作。小型团队或初创公司流程简单效率高。内部工具或快速迭代项目不需要复杂的版本管理。常用Git命令Git 命令非常丰富下面按使用场景分类列出最常用的命令及其基本用法。你可以通过git help 命令或git 命令 --help查看详细帮助。配置git config --global user.name Your Name设置全局用户名。git config --global user.email emailexample.com设置全局邮箱。git config --list查看当前配置。git config --global core.editor code --wait设置默认编辑器例如 VS Code。创建/克隆仓库git init在当前目录初始化一个新的 Git 仓库。git clone 仓库URL克隆远程仓库到本地。git clone -b 分支名 仓库URL克隆指定分支。基本快照操作git status查看工作区、暂存区的状态。git add 文件将文件添加到暂存区。git add .添加所有变动新文件、修改、删除。git commit -m 提交信息将暂存区内容提交到本地仓库。git commit -a -m 信息跳过git add直接提交所有已跟踪文件的修改不包括新文件。git diff查看工作区与暂存区的差异。git diff --staged查看暂存区与上次提交的差异。git rm 文件从工作区和暂存区删除文件。git mv 旧名 新名重命名文件。分支与合并git branch列出本地分支当前分支前有*。git branch -a列出所有分支包括远程。git branch 分支名创建新分支停留在当前分支。git checkout 分支名切换到指定分支。git checkout -b 分支名创建并切换到新分支。git merge 分支名将指定分支合并到当前分支。git rebase 分支名将当前分支的提交变基到目标分支。git branch -d 分支名删除已合并的分支。git branch -D 分支名强制删除未合并的分支。git log --graph --oneline --decorate --all以图形方式查看分支历史。远程操作git remote -v查看远程仓库地址。git remote add 远程名 URL添加远程仓库通常远程名为origin。git fetch 远程名从远程获取最新代码但不自动合并。git pull 远程名 分支名从远程拉取并合并到当前分支等效于git fetchgit merge。git push 远程名 分支名将本地分支推送到远程。git push -u 远程名 分支名首次推送时建立上游关联之后可简写为git push。git push 远程名 --delete 分支名删除远程分支。git remote prune 远程名清理本地已不存在的远程分支记录。撤销与恢复git restore 文件撤销工作区的修改将文件恢复到暂存区或 HEAD 的状态。git restore --staged 文件将文件从暂存区移出但保留工作区修改。git reset --soft HEAD~1撤销最近一次提交但保留修改在暂存区。git reset --mixed HEAD~1默认撤销提交并取消暂存保留工作区修改。git reset --hard HEAD~1彻底撤销提交和修改危险操作。git revert commit生成一个新提交来撤销指定提交适合用于公共分支。git clean -fd删除工作区中未跟踪的文件和目录-f强制-d包括目录。查看历史git log查看提交历史。git log --oneline简洁格式。git log -p显示每次提交的内容差异。git log --authorname按作者过滤。git show commit显示某次提交的详细信息。git blame 文件逐行查看文件的修改历史和作者。git reflog查看所有分支的引用变动记录可用于找回丢失的提交。标签git tag列出所有标签。git tag 标签名给当前提交创建轻量标签。git tag -a 标签名 -m 信息创建附注标签。git push 远程名 标签名推送指定标签到远程。git push 远程名 --tags推送所有本地标签。git tag -d 标签名删除本地标签。git push 远程名 :refs/tags/标签名删除远程标签。储藏Stashgit stash将当前未提交的修改暂存起来工作区回到干净状态。git stash list查看储藏列表。git stash pop应用最近的储藏并从列表中删除。git stash apply应用储藏但保留在列表中。git stash drop删除指定储藏。git stash branch 新分支名基于储藏创建新分支。帮助git help查看常用命令帮助。git help 命令查看特定命令的详细手册。版本更新git --version查看版本信息git update-git-for-windows安装最新版本git