Git 新手入门指南
前言日常开发离不开代码版本管理Git 是目前行业标准分布式版本控制工具。本文结合实操案例从零梳理 Git 核心概念、完整工作流程新手可直接对照实操。一、Git特性1.集中式 VS 分布式行业分为两类版本控制体系集中式 CVCSSVN/CVS、分布式 DVCSGit二者架构、数据安全、协作体验差异巨大。1.1 集中式版本控制系统SVN/CVS架构特点存在唯一中心服务器完整代码与全部版本历史仅存放在服务器所有开发者仅拥有本地文件副本无完整版本库。协作逻辑拉取代码、提交更新、查看历史、对比差异全部依赖网络连接服务器断网后无法提交代码、无法查看完整版本日志。致命缺陷单点故障风险极高服务器宕机全员无法提交、协同开发中断服务器磁盘损坏、备份丢失项目全部版本历史永久丢失仅能依靠开发者零散本地文件抢救数据恢复难度极大。1.2 分布式版本控制系统Git架构特点不存在绝对唯一的中心节点每一台开发电脑都会完整镜像整套代码仓库包含全部提交历史、分支、版本快照远程仓库仅作为团队代码同步中转站Gitee/GitHub/GitLab。数据安全优势任意服务器故障任意开发者本地完整仓库均可完整恢复项目所有历史天然全量备份协作灵活可离线开发、本地多分支调试联网后统一同步远程多人协作互不依赖单一服务器。2 版本存储机制快照存储 vs 增量差异存储这是 Git 与 SVN 最核心的底层区别直接决定 Git 速度更快、版本还原更稳定。2.1 传统集中式工具增量差异存储SVN、CVS 只会记录文件每一次改动的增量差异修改了哪几行、删除了哪些字符。查看历史、回退版本时需要叠加所有历史差分拼接出完整文件效率偏低。2.2 Git完整快照存储Git 不记录文件差异每次提交对全部文件生成完整快照通过文件哈希指纹区分文件文件未修改不重复存储文件仅复用上次快照的文件链接节省磁盘空间文件发生修改单独存储全新文件快照优势读取历史、版本回退无需叠加差分直接读取完整快照速度极快文件还原不易出错。二、Git 核心概念1. 版本库Repository / 仓库仓库就是受 Git 管理的项目目录分为本地仓库和远程仓库所有文件的新增、修改、删除都会被 Git 全程追踪支持随时查看历史、回滚文件。远程仓库 Remote云端 / 服务器存放的代码库多人协作共享代码常见平台GitHub、Gitee、GitLab。本地仓库 Repository电脑本地项目目录核心隐藏文件夹.git就是本地版本库本体存储全部提交快照、分支、版本日志禁止手动修改 .git 内部文件。 本地仓库内部又划分三层工作区 Workspace项目目录下所有可见文件排除.git文件夹我们日常写代码、修改文件的地方暂存区 Stage/Index.git/index文件临时缓存修改相当于提交前的中转站分支 Branch仓库的代码开发线新版 Git 默认主分支main旧版默认master二者功能完全一致仅名称区别主分支存放稳定可上线代码。2. 四大区域流转逻辑工作区文件 →git add→ 暂存区 →git commit→ 本地仓库分支 →git push→ 远程仓库 远程仓库代码 →git pull→ 本地仓库 工作区三、完整开发工作流程克隆远程仓库git clone 远程地址把完整代码 所有版本记录下载到本地本地开发修改新建 / 修改文件可创建独立分支开发不污染主分支暂存变更git add将改动放入暂存区提交本地仓库git commit -m 提交说明生成永久本地版本快照拉取远程最新代码git pull合并远程更新出现冲突手动解决推送远程仓库git push将本地提交同步到远程队友可拉取你的代码。四、Git 基础命令详解3.1 创建本地版本库初始化 Git 仓库git init查看仓库状态git status添加所有文件到暂存区git add .或git add 文件名提交到本地仓库git commit -m 提交说明3.2 远程仓库操作查看远程仓库地址git remote -v添加远程仓库git remote add origin 远程仓库地址拉取远程仓库最新代码git pull origin 分支名推送本地提交到远程git push origin 分支名克隆远程仓库git clone 远程仓库地址3.3 分支管理查看所有分支git branch创建新分支git branch 分支名切换分支git checkout 分支名或git switch 分支名创建并切换到新分支git checkout -b 分支名或git switch -c 分支名合并分支git merge 分支名将指定分支合并到当前分支删除分支git branch -d 分支名删除已合并的分支强制删除分支git branch -D 分支名删除未合并的分支3.4 查看与比较查看提交历史git log按时间倒序显示查看简洁提交历史git log --oneline查看文件修改内容git diff比较工作区和暂存区查看暂存区与最新提交的差异git diff --staged查看两个提交之间的差异git diff 提交ID1 提交ID23.5 撤销与回退撤销工作区修改git checkout -- 文件名危险操作会丢失修改从暂存区移除文件git reset HEAD 文件名撤销最近一次提交保留修改git reset --soft HEAD~1撤销最近一次提交不保留修改git reset --hard HEAD~1危险操作修改最近一次提交信息git commit --amend -m 新提交信息3.6 标签管理查看所有标签git tag创建轻量标签git tag 标签名创建附注标签git tag -a 标签名 -m 标签说明推送标签到远程git push origin 标签名推送所有标签git push origin --tags删除本地标签git tag -d 标签名删除远程标签git push origin :refs/tags/标签名五、Git实操4.1创建版本库1创建一个文件夹testGit再右键通过命令行的方式打开窗口2通过命令 git init 把这个目录变成git可以管理的仓库如下Git的版本库里存了很多东西其中最重要的就是称为stage或者叫index的暂存区还有Git为我们自动创建的第一个分支master以及指向master的一个指针叫HEAD。此时当前testGit目录下会多了一个.git的目录这个目录是Git来跟踪管理版本的没事千万不要手动乱改这个目录里面的文件否则会把git仓库给破坏了。.git里面内容如下4.2添加文件和修改提交文件首先要明确下所有的版本控制系统只能跟踪文本文件的改动比如txt文件网页所有程序的代码等Git也不列外版本控制系统可以告诉你每次的改动但是图片视频这些二进制文件虽能也能由版本控制系统管理但没法跟踪文件的变化只能把二进制文件每次改动串起来也就是知道图片从1kb变成2kb但是到底改了啥版本控制也不知道。1创建文件readme.txt, 此刻文件在工作区WorkSpace输入vi指令之后会打开该文件内容是空的点击i键就可以在里面添加内容在点击Esc键输入:wq就可以进行保存并退出通过git status可以查看文件追踪情况2使用git add命令将新建的文件添加到暂存区里没使用add之前都只是在testGit文件夹里面git不会进行管理查看git status发现文件名变绿逻辑图如下3提交文件到主分支git commit -m 注释内容注意这条语句是将暂存区的文件提交到本地仓库剩下的步骤我就省略了可以按照基本命令来进行演示六、Git 进阶知识点5.1 Git 配置管理Git 配置分为三个级别优先级从高到低系统级配置git config --system影响所有用户全局级配置git config --global影响当前用户所有仓库仓库级配置git config --local仅影响当前仓库常用配置命令# 设置用户名和邮箱首次使用 Git 必须配置 git config --global user.name 你的名字 git config --global user.email 你的邮箱 查看所有配置 git config --list 设置默认编辑器为 VSCode git config --global core.editor code --wait 设置默认分支名称为 main git config --global init.defaultBranch main 设置命令别名简化常用命令 git config --global alias.st status git config --global alias.co checkout git config --global alias.br branch git config --global alias.ci commit5.2 .gitignore 文件.gitignore 文件用于指定哪些文件或目录应该被 Git 忽略不纳入版本控制。常见需要忽略的文件类型# 编译产物 *.class *.exe *.dll *.so *.dylib 包管理文件 node_modules/ vendor/ target/ build/ dist/ 编辑器配置文件 .vscode/ .idea/ *.swp *.swo 系统文件 .DS_Store Thumbs.db 日志文件 *.log logs/ 环境配置文件 .env .env.local .env.development.local .env.test.local .env.production.local使用方式在项目根目录创建 .gitignore 文件将上述规则写入即可。5.3 Git 分支策略合理的分支策略能提高团队协作效率主分支main/master稳定可发布版本只接受合并不接受直接提交开发分支develop日常开发集成分支功能开发完成后合并到此分支功能分支feature/*开发新功能时创建完成后合并到 develop发布分支release/*准备发布版本时创建用于测试和修复 bug热修复分支hotfix/*生产环境紧急 bug 修复5.4 Git 工作流常见的 Git 工作流模型集中式工作流类似 SVN所有开发者直接向 main 分支提交功能分支工作流每个功能在独立分支开发通过 Pull Request 合并GitFlow 工作流严格的分支模型适合大型项目Forking 工作流开源项目常用每个开发者 fork 仓库通过 PR 贡献代码5.5 Git 高级命令储藏修改临时保存工作区修改git stash # 储藏当前修改 git stash list # 查看储藏列表 git stash pop # 应用最近一次储藏并删除 git stash apply # 应用储藏但不删除 git stash drop # 删除指定储藏查看提交历史git log --graph --oneline --all # 图形化显示分支历史 git log --since2024-01-01 # 查看指定时间后的提交 git log --author用户名 # 查看指定作者的提交 git log -p # 显示提交的详细差异重写历史git rebase -i HEAD~3 # 交互式重写最近3次提交 git cherry-pick 提交ID # 将指定提交应用到当前分支子模块管理git submodule add 仓库地址 路径 # 添加子模块 git submodule update --init # 初始化并更新子模块 git submodule foreach git pull # 更新所有子模块5.6 Git 最佳实践提交信息规范使用清晰、简洁的提交信息说明做了什么而不是怎么做的小步提交每次提交只完成一个小的功能或修复频繁拉取定期拉取远程更新避免大规模冲突分支清理及时删除已合并的分支保持仓库整洁代码审查使用 Pull Request 进行代码审查提高代码质量备份重要分支重要分支推送到远程仓库防止本地数据丢失5.7 常见问题解决撤销错误的合并git merge --abort # 中止合并 git reset --hard ORIG_HEAD # 回退到合并前状态找回误删的分支git reflog # 查看所有操作记录 git checkout -b 分支名 提交ID # 根据记录恢复分支解决大文件问题# 使用 git filter-branch 或 BFG Repo-Cleaner 清理历史大文件 git filter-branch --tree-filter rm -f 大文件路径 HEAD配置代理# 设置 HTTP/HTTPS 代理 git config --global http.proxy http://proxy.example.com:8080 git config --global https.proxy https://proxy.example.com:8080 取消代理 git config --global --unset http.proxy git config --global --unset https.proxy这些进阶知识点能帮助你更深入地理解和使用 Git提高开发效率和代码管理质量。