Git 新手入门指南

前言

日常开发离不开代码版本管理,Git 是目前行业标准分布式版本控制工具。本文结合实操案例,从零梳理 Git 核心概念、完整工作流程,新手可直接对照实操。

一、Git特性

1.集中式 VS 分布式

行业分为两类版本控制体系:集中式 CVCS(SVN/CVS)分布式 DVCS(Git),二者架构、数据安全、协作体验差异巨大。

1.1 集中式版本控制系统(SVN/CVS)

架构特点:存在唯一中心服务器,完整代码与全部版本历史仅存放在服务器;所有开发者仅拥有本地文件副本,无完整版本库。

  1. 协作逻辑:拉取代码、提交更新、查看历史、对比差异全部依赖网络连接服务器;断网后无法提交代码、无法查看完整版本日志。
  2. 致命缺陷:单点故障风险极高
    • 服务器宕机:全员无法提交、协同开发中断;
    • 服务器磁盘损坏、备份丢失:项目全部版本历史永久丢失,仅能依靠开发者零散本地文件抢救数据,恢复难度极大。
1.2 分布式版本控制系统(Git)

架构特点:不存在绝对唯一的中心节点,每一台开发电脑都会完整镜像整套代码仓库,包含全部提交历史、分支、版本快照;远程仓库仅作为团队代码同步中转站(Gitee/GitHub/GitLab)。

  1. 数据安全优势:任意服务器故障,任意开发者本地完整仓库均可完整恢复项目所有历史,天然全量备份;
  2. 协作灵活:可离线开发、本地多分支调试,联网后统一同步远程;多人协作互不依赖单一服务器。

2 版本存储机制:快照存储 vs 增量差异存储

这是 Git 与 SVN 最核心的底层区别,直接决定 Git 速度更快、版本还原更稳定。

2.1 传统集中式工具:增量差异存储

SVN、CVS 只会记录文件每一次改动的增量差异(修改了哪几行、删除了哪些字符)。查看历史、回退版本时,需要叠加所有历史差分拼接出完整文件,效率偏低。

2.2 Git:完整快照存储

Git 不记录文件差异,每次提交对全部文件生成完整快照,通过文件哈希指纹区分文件:

  1. 文件未修改:不重复存储文件,仅复用上次快照的文件链接,节省磁盘空间;
  2. 文件发生修改:单独存储全新文件快照;
  3. 优势:读取历史、版本回退无需叠加差分,直接读取完整快照,速度极快,文件还原不易出错。

二、Git 核心概念

1. 版本库(Repository / 仓库)

仓库就是受 Git 管理的项目目录,分为本地仓库远程仓库,所有文件的新增、修改、删除都会被 Git 全程追踪,支持随时查看历史、回滚文件。

  1. 远程仓库 Remote 云端 / 服务器存放的代码库,多人协作共享代码,常见平台:GitHub、Gitee、GitLab。
  2. 本地仓库 Repository 电脑本地项目目录,核心隐藏文件夹 .git 就是本地版本库本体,存储全部提交快照、分支、版本日志,禁止手动修改 .git 内部文件 。 本地仓库内部又划分三层:
    • 工作区 Workspace :项目目录下所有可见文件(排除 .git 文件夹),我们日常写代码、修改文件的地方;
    • 暂存区 Stage/Index.git/index 文件,临时缓存修改,相当于提交前的中转站;
    • 分支 Branch :仓库的代码开发线,新版 Git 默认主分支 main,旧版默认 master,二者功能完全一致,仅名称区别,主分支存放稳定可上线代码。

2. 四大区域流转逻辑

工作区文件 → git add → 暂存区 → git commit → 本地仓库分支 → git push → 远程仓库 远程仓库代码 → git pull → 本地仓库 + 工作区

三、完整开发工作流程

  1. 克隆远程仓库git clone 远程地址,把完整代码 + 所有版本记录下载到本地;
  2. 本地开发修改:新建 / 修改文件,可创建独立分支开发,不污染主分支;
  3. 暂存变更git add 将改动放入暂存区;
  4. 提交本地仓库git commit -m "提交说明",生成永久本地版本快照;
  5. 拉取远程最新代码git pull,合并远程更新,出现冲突手动解决;
  6. 推送远程仓库git push,将本地提交同步到远程,队友可拉取你的代码。

四、Git 基础命令详解

3.1 创建本地版本库

  1. 初始化 Git 仓库:git init
  2. 查看仓库状态:git status
  3. 添加所有文件到暂存区:git add .git add 文件名
  4. 提交到本地仓库:git commit -m "提交说明"

3.2 远程仓库操作

  1. 查看远程仓库地址:git remote -v
  2. 添加远程仓库:git remote add origin 远程仓库地址
  3. 拉取远程仓库最新代码:git pull origin 分支名
  4. 推送本地提交到远程:git push origin 分支名
  5. 克隆远程仓库:git clone 远程仓库地址

3.3 分支管理

  1. 查看所有分支:git branch
  2. 创建新分支:git branch 分支名
  3. 切换分支:git checkout 分支名git switch 分支名
  4. 创建并切换到新分支:git checkout -b 分支名git switch -c 分支名
  5. 合并分支:git merge 分支名(将指定分支合并到当前分支)
  6. 删除分支:git branch -d 分支名(删除已合并的分支)
  7. 强制删除分支:git branch -D 分支名(删除未合并的分支)

3.4 查看与比较

  1. 查看提交历史:git log(按时间倒序显示)
  2. 查看简洁提交历史:git log --oneline
  3. 查看文件修改内容:git diff(比较工作区和暂存区)
  4. 查看暂存区与最新提交的差异:git diff --staged
  5. 查看两个提交之间的差异:git diff 提交ID1 提交ID2

3.5 撤销与回退

  1. 撤销工作区修改:git checkout -- 文件名(危险操作,会丢失修改)
  2. 从暂存区移除文件:git reset HEAD 文件名
  3. 撤销最近一次提交(保留修改):git reset --soft HEAD~1
  4. 撤销最近一次提交(不保留修改):git reset --hard HEAD~1(危险操作)
  5. 修改最近一次提交信息:git commit --amend -m "新提交信息"

3.6 标签管理

  1. 查看所有标签:git tag
  2. 创建轻量标签:git tag 标签名
  3. 创建附注标签:git tag -a 标签名 -m "标签说明"
  4. 推送标签到远程:git push origin 标签名
  5. 推送所有标签:git push origin --tags
  6. 删除本地标签:git tag -d 标签名
  7. 删除远程标签: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 配置分为三个级别,优先级从高到低:

  1. 系统级配置git config --system,影响所有用户
  2. 全局级配置git config --global,影响当前用户所有仓库
  3. 仓库级配置git config --local,仅影响当前仓库

常用配置命令:

bash 复制代码
# 设置用户名和邮箱(首次使用 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 commit

5.2 .gitignore 文件

.gitignore 文件用于指定哪些文件或目录应该被 Git 忽略,不纳入版本控制。

常见需要忽略的文件类型:

bash 复制代码
# 编译产物
*.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 分支策略

合理的分支策略能提高团队协作效率:

  1. 主分支(main/master):稳定可发布版本,只接受合并,不接受直接提交
  2. 开发分支(develop):日常开发集成分支,功能开发完成后合并到此分支
  3. 功能分支(feature/*):开发新功能时创建,完成后合并到 develop
  4. 发布分支(release/*):准备发布版本时创建,用于测试和修复 bug
  5. 热修复分支(hotfix/*):生产环境紧急 bug 修复

5.4 Git 工作流

常见的 Git 工作流模型:

  1. 集中式工作流:类似 SVN,所有开发者直接向 main 分支提交
  2. 功能分支工作流:每个功能在独立分支开发,通过 Pull Request 合并
  3. GitFlow 工作流:严格的分支模型,适合大型项目
  4. Forking 工作流:开源项目常用,每个开发者 fork 仓库,通过 PR 贡献代码

5.5 Git 高级命令

  1. 储藏修改 :临时保存工作区修改

    bash 复制代码
    git stash          # 储藏当前修改
    git stash list     # 查看储藏列表
    git stash pop      # 应用最近一次储藏并删除
    git stash apply    # 应用储藏但不删除
    git stash drop     # 删除指定储藏
  2. 查看提交历史

    bash 复制代码
    git log --graph --oneline --all  # 图形化显示分支历史
    git log --since="2024-01-01"     # 查看指定时间后的提交
    git log --author="用户名"         # 查看指定作者的提交
    git log -p                        # 显示提交的详细差异
  3. 重写历史

    bash 复制代码
    git rebase -i HEAD~3  # 交互式重写最近3次提交
    git cherry-pick 提交ID  # 将指定提交应用到当前分支
  4. 子模块管理

    bash 复制代码
    git submodule add 仓库地址 路径  # 添加子模块
    git submodule update --init     # 初始化并更新子模块
    git submodule foreach git pull  # 更新所有子模块

5.6 Git 最佳实践

  1. 提交信息规范:使用清晰、简洁的提交信息,说明做了什么而不是怎么做的
  2. 小步提交:每次提交只完成一个小的功能或修复
  3. 频繁拉取:定期拉取远程更新,避免大规模冲突
  4. 分支清理:及时删除已合并的分支,保持仓库整洁
  5. 代码审查:使用 Pull Request 进行代码审查,提高代码质量
  6. 备份重要分支:重要分支推送到远程仓库,防止本地数据丢失

5.7 常见问题解决

  1. 撤销错误的合并

    bash 复制代码
    git merge --abort          # 中止合并
    git reset --hard ORIG_HEAD  # 回退到合并前状态
  2. 找回误删的分支

    bash 复制代码
    git reflog                 # 查看所有操作记录
    git checkout -b 分支名 提交ID  # 根据记录恢复分支
  3. 解决大文件问题

    bash 复制代码
    # 使用 git filter-branch 或 BFG Repo-Cleaner 清理历史大文件
    git filter-branch --tree-filter 'rm -f 大文件路径' HEAD
  4. 配置代理

    bash 复制代码
    # 设置 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,提高开发效率和代码管理质量。

相关推荐
达达车1 小时前
git使用技巧记录
git·使用技巧·版本管理
Simon—欧阳3 小时前
Git使用心得&理解
git
AI行业学习4 小时前
Claude Code + cc-switch + Git + Node.js 一站式完整安装配置教程【8.3】
git·python·安全·前端框架·node.js·html·notepad++
AI行业学习4 小时前
Claude Code + cc-switch + Git + Node.js 一站式完整安装配置教程(2026最新·国内可用版)
人工智能·git·python·安全·node.js·html·notepad++
维基框架16 小时前
OpenAI在给Git做优化 上游行为要变了
人工智能·git
1名持续学习的码农16 小时前
GPT Plus、GPT Pro用户第一次用Codex,项目权限和Git分支怎么设置?
人工智能·git·gpt·elasticsearch·ai编程·codex
晨曦中的暮雨1 天前
Learn Claude Code:CodeAgent 与后端程序大搭配——定时任务、Git Worktree 和MCP 服务
git·ai·llm·agent
减瓦1 天前
用 Git 为本地文件打造一台时光机
开发语言·git·编辑器