教你快速上手Git
Git是流行的分布式版本控制系统,能够高效地管理各种规模的项目代码,追踪文件的修改历史,支持多人合作,是程序员必备的工具之一。
一、什么是版本控制
版本控制是一种记录文件(或项目)内容变化的系统,方便追溯历史版本,恢复误删文件,多人协同修改同一文件等。
常见的版本控工具包括Git,SVN(集中式),CVS等,而Git因分布式,高效灵活等特点成为主流。
二、Git、SVN、CVS的联系与区别
2.1 联系
Git、SVN、CVS三者都是版本控制系统,核心目的都是:
-
历史追踪:记录文件修改的全生命周期(何时修改,由谁修改,修改内容)
-
协作支持:允许多用户同时开发,提供合并,冲突解决等协作机制
-
版本回溯:支持恢复到任意历史版本,避免因错误操作导致代码丢失
2.2 区别
对比维度
Git
SVN
CVS
系统架构
分布式
每个用户拥有完整仓库和版本历史
集中式
依赖中央服务器存储全部数据
集中式
中央服务器为唯一权威版本源
数据存储的方式
基于快照
存储文件整体的状态
记录文件的差异
仅保存最新版本,历史版本仅保留差异
分支管理
轻量级分支,创建/合并速度快
分支生成完整目录副本,操作成本高
分支支持有限,操作复杂且效率低
网络依赖
本地操作无需联网,仅同步时需要连接远程仓库
提交,拉取等操作依赖中央服务器
所有操作需要连接中央服务器
历史记录的完整性
完整保存所有修改版本,便于精细回溯
仅记录文件变更记录,历史追溯能力有限
历史信息简单,回退版本可难丢失中间过程
安全性
基于SHA-1哈希校验,数据不可篡改
依赖中央服务器的权限管理
基础权限控制,完全性较弱
应用场景
开源项目,分布式团队协作,高频迭代项目
企业内部传统项目管理,需要严格控制权限的场景
遗留系统维护,逐步被SVN/Git替代
三、Git的核心特点
-
分布式:每个开发者的本地都会有完整的仓库(包含所有的历史版本),无需依赖中央服务器,断网时仍可提交代码
-
数据完整性:Git对所有文件和操作都通过SHA-1哈希算法生成唯一校验值,确保数据不被篡改
-
高效分支:创建,切换,合并分支的成本极低,支持并行开发
-
离线工作:大部分操作(如提交,分支管理)可在本地完成,仅同步时需要网络
四、Git的核心概念和工作区域
Git的核心是通过四个区域管理文件状态的
区域
定义
对应操作
工作区
本地电脑中能直接编辑的文件目录(项目文件夹)
手动修改文件(如编辑代码)
暂存区
临时存储待提交的修改(也叫“索引”),位于.git/index文件中
git add(将工作区修改添加到暂存区)
git reset Head filename(从暂存区移除)
本地仓库
存储所有版本历史的数据库,位于.git文件夹中(隐藏目录)
git commit(将暂存区内容提交到本地仓库)
远程仓库
托管在服务器上的仓库(如GitHub,GitLab),用于多人共享代码
git push(本地仓库的代码推送到远程仓库)
git pull(远程仓库的代码拉取到本地)
五、Git的工作流程
工作流程:初始化--->修改--->暂存--->提交--->同步
步骤一:初始化或克隆仓库
-
新建项目:在本地文件夹中执行git init,生成.git目录(初始化本地仓库)
-
已有远程仓库:用git clone 远程仓库地址 讲远程仓库的代码克隆到本地(自动关联远程仓库)
步骤二:修改
编辑代码,新增/删除文件等
步骤三:暂存
将修改添加到暂存区
-
执行git add filename(指定文件添加到暂存区)或git add .(添加所有的修改),将工作区的修改暂存
步骤四:提交
将暂存区的修改提交到本地仓库
-
执行git commit -m \"提交的说明\",将暂存区的修改永久保存到本地仓库,生成一个新的版本(用SHA-1哈希标识)
步骤五:同步
将本地仓库中的内容同步到远程仓库中
-
git push -u origin feature(将本地仓库中的内容同步到远程的feature分支,-u 关联分支,后续可以直接git push,默认推送到feature分支)
注意:推送前,先拉取他人提交,避免冲突使用git pull命令
六、Git常用命令详解
6.1 基础状态查看
-
git status:查看工作区,暂存区的状态(哪些文件被修改,为暂存,未跟踪等)
-
git diff:查看工作区与暂存区的差异(未add的修改)
-
git diff --staged:查看暂存区与本地仓库的差异(已add但未commit的修改)
6.2 提交历史查看
-
git commit -m \"描述\":提交暂存区到本地仓库,-m后面是提交的说明(必须写)
-
git commit -am \"描述\":跳过暂存区,直接提交工作区中已跟踪的文件
-
git log:查看提交历史(按照时间倒序,显示哈希,作者,时间,描述)
-
git log --online:简化显示(一行只显示一个提交)
-
git log --graph --oneline(图形化展示分支合并历史)
6.3 分支管理*
分支是Git最强的功能,用于隔离不同开发任务(如同学A在开发新功能,同学B在修复老功能的Bug)
核心命令:
-
git branch:查看所有本地分支
-
git branch 分支名:创建新的分支
-
git switch/checkout 分支名:切换到指定分支
-
git branch -d 分支名:删除已合并的分支(强制删除用-D)
-
git merge 分支名:将制定的分支合并到当前分支(例如在main/master分支上执行git merge feature,合并新功能)
6.4 远程仓库操作
-
git remote:查看已关联的远程仓库
-
git remote -v:查看已关联的远程仓库并显示详细地址
-
git remote add 远程仓库名 地址:关联远程仓库(如git remote add origin https://xxxxxxx,origin是远程仓库的默认别名)
-
git push 远程仓库名 分支名:推送本地分支到远程仓库
-
git pull 远程仓库名 分支名:拉取远程仓库分支并合并到本地当前分支(等价于git fetch+git merge)
-
git fetch:拉取远程最新的代码到本地,但不合并,可先查看差异再决定是否合并