git 全面学习认识

Git 全面指南:核心概念、命令精讲与深度对比

Git 是一个分布式版本控制系统,它能够高效、灵活地管理项目代码,并支持团队协作。掌握 Git 不仅是开发者的基本技能,更是提升工作效率和代码质量的关键。


一、Git 核心概念与工作原理

理解 Git 的内部机制是高效使用的基础。

1.1 Git 的三大区域:工作区、暂存区、本地仓库
  • 工作区 (Working Directory)
    • 定义:你电脑上实际可见、编辑和操作的文件和目录。这是你进行代码开发的地方。
    • 状态:文件可以是“未修改”、“已修改”或“未跟踪”。
  • 暂存区 (Staging Area / Index)
    • 定义:一个介于工作区和本地仓库之间的缓存区域。它是一个文件(通常在 .git/index),记录了你下次提交时要包含的文件的快照。
    • 作用:允许你精确控制每次提交的内容。你可以选择性地将工作区中的部分更改添加到暂存区,多次 git add 来逐步构建一个逻辑清晰的提交。
  • 本地仓库 (Local Repository)
    • 定义:项目根目录下隐藏的 .git 文件夹。它包含了项目所有的版本历史信息,包括所有提交对象、分支指针、标签、配置等。
    • 作用:存储了项目完整的历史记录。即使没有网络连接,你也可以进行提交、查看历史、切换分支等操作。
1.2 HEAD 指针与分支
  • HEAD
    • 定义:一个特殊的指针,它总是指向你当前所在分支的最新提交
    • 作用:标识你当前工作区和暂存区所基于的提交。当你进行新的提交时,HEAD 会随着当前分支一起向前移动。
  • 分支 (Branch)
    • 定义:一个轻量级的可移动指针,指向某个提交。默认分支通常是 mainmaster
    • 作用:允许你在不影响主线开发的情况下进行并行工作。每个分支都代表了项目历史中的一个独立开发路径。
1.3 远程仓库与远程跟踪分支
  • 远程仓库 (Remote Repository)
    • 定义:托管在网络上的 Git 仓库(如 GitHub、GitLab、Gerrit 等),用于团队成员之间共享代码和协作。
    • 作用:作为团队协作的中心枢纽,方便代码的同步、备份和发布。
  • 远程跟踪分支 (Remote-tracking Branch)
    • 定义:本地仓库中对远程仓库分支的引用(例如 origin/main)。它是一个只读的本地指针,反映了你上次与远程仓库通信时,远程分支所处的位置。
    • 作用:让你知道远程分支的最新状态,而无需实际切换到远程分支。它不是你可以在其上直接工作的分支。
1.4 Git 对象模型 (Blob, Tree, Commit, Tag)

Git 内部存储数据是通过四种基本对象:

  • Blob (二进制大对象):存储文件的内容。每个文件的内容都有一个唯一的 Blob 对象。
  • Tree (树对象):存储目录结构和文件名的映射。它包含指向 Blob 对象(文件)和其它 Tree 对象(子目录)的指针。
  • Commit (提交对象):存储了项目在某个时间点的快照。它包含:
    • 指向一个 Tree 对象的指针(代表项目根目录的快照)。
    • 作者信息、提交者信息、提交时间。
    • 提交信息。
    • 一个或多个父提交的指针(通常是一个,合并提交有多个)。
  • Tag (标签对象):指向一个提交的永久性引用,通常用于标记发布版本。
1.5 Git 工作流程概览
  1. 修改:在工作区中修改文件。
  2. 暂存:使用 git add 将修改后的文件从工作区添加到暂存区
  3. 提交:使用 git commit暂存区中的快照永久保存到本地仓库,形成一个新的提交。
  4. 同步:使用 git push本地仓库的提交推送到远程仓库,或使用 git pull远程仓库获取更新到本地仓库

二、Git 基础配置与仓库管理

2.1 git config:配置 Git 环境
  • 目的:配置 Git 的行为,包括用户信息、编辑器、别名、换行符处理等。
  • 作用域
    • --system:系统级别,对所有用户和所有仓库生效(通常需要管理员权限)。
    • --global:用户级别,对当前用户的所有仓库生效。
    • --local (默认):仓库级别,只对当前仓库生效。
  • 常用用法
    # 设置全局用户名(用于提交记录的 Author)
    git config --global user.name "Your Name"
    
    # 设置全局用户邮箱
    git config --global user.email "your.email@example.com"
    
    # 查看所有配置
    git config --list
    
    # 查看特定配置
    git config user.name
    
    # 设置默认文本编辑器(如 VS Code, Vim)
    git config --global core.editor "code --wait" # VS Code
    git config --global core.editor "vim"       # Vim
    
    # 配置 Git 别名 (快捷方式)
    git config --global alias.co checkout #git checkout=git co
    git config --global alias.br branch
    git config --global alias.ci commit
    git config --global alias.st status
    git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"
    
    # 配置换行符自动转换 (重要,尤其在跨平台协作时)
    # Windows 用户推荐:
    git config --global core.autocrlf true
    # Linux/macOS 用户推荐:
    git config --global core.autocrlf input
    
  • 细致讲解core.autocrlf 用于处理 Windows (CRLF) 和 Unix/Linux (LF) 之间不同的换行符约定。true 表示 Git 在提交时将 CRLF 转换为 LF,在签出时将 LF 转换回 CRLF;input 表示 Git 在提交时将 CRLF 转换为 LF,但签出时不转换(保持 LF)。
2.2 git init:初始化本地仓库
  • 目的:在一个空目录或现有项目目录中创建空的 Git 仓库。
  • 用法
    mkdir my_new_project
    cd my_new_project
    git init
    
  • 细致讲解:执行 git init 后,会在当前目录下创建一个 .git 隐藏文件夹。这个文件夹就是你的本地仓库,包含了 Git 管理项目所需的所有元数据。此时,你的工作区和暂存区都是空的,但已准备好接收文件。
2.3 git clone:克隆远程仓库
  • 目的:从远程仓库复制一份完整的仓库到本地,包括所有历史记录和分支。
  • 用法
    git clone <远程仓库URL> [本地目录名]
    # 示例:git clone https://github.com/user/repo.git MyProject
    
  • 细致讲解
    • git clone 会在当前目录下创建一个与远程仓库同名的目录(如果未指定 本地目录名),并将远程仓库的所有历史记录下载到本地。
    • 它会自动:
      1. 将远程仓库命名为 origin(这是一个别名)。
      2. 设置本地的 main (或 master) 分支跟踪远程的 origin/main (或 origin/master) 分支。
      3. 检出远程仓库的默认分支到你的本地工作区。
    • 克隆完成后,你就可以在本地进行开发、提交,并与远程仓库同步。
2.4 git remote:管理远程仓库连接
  • 目的:管理你的本地仓库与远程仓库之间的连接信息。
  • 用法
    git remote -v                # 列出所有远程仓库的名称及其URL (verbose 模式)
    git remote add <名称> <URL>   # 添加一个新的远程仓库连接
    # 示例:git remote add upstream https://github.original.com/repo.git
    git remote rm <名称>         # 删除一个远程仓库连接
    git remote rename <旧名称> <新名称> # 重命名一个远程仓库连接
    git remote set-url <名称> <新URL> # 修改远程仓库的URL
    
  • 细致讲解origingit clone 自动为你创建的默认远程仓库名称。你可以添加多个远程仓库,例如 upstream 来指代原始上游仓库,而 origin 指代你自己的 Fork。

三、日常开发:文件状态与本地提交

3.1 git status:查看工作区状态
  • 目的:显示工作区和暂存区中文件的当前状态,帮助你了解哪些文件被修改、哪些已暂存、哪些未跟踪。
  • 用法
    git status
    
  • 细致讲解
    • Untracked files (未跟踪):新创建的文件,Git 还没有开始跟踪它们。需要 git add 才能将其纳入版本控制。
    • Changes to be committed (待提交的更改):已添加到暂存区的文件,这些更改将在下次 git commit 时被包含。
    • Changes not staged for commit (未暂存的更改):已修改但尚未添加到暂存区的文件。
    • nothing to commit, working tree clean (工作区干净):所有更改都已提交,工作区没有未暂存的修改。
  • 常用选项
    • git status -sgit status --short:以简洁的格式显示状态,每行一个文件,用两个字符表示状态(如 M 表示已修改未暂存,AM 表示已添加到暂存区但工作区又被修改)。
3.2 git add:添加文件到暂存区
  • 目的:将工作区中的更改(新建、修改、删除)添加到暂存区,准备提交。
  • 用法
    git add <文件名>           # 添加指定文件
    git add dir/              # 添加指定目录下的所有文件
    
  • 细致讲解git add 并不是真的“添加”文件到仓库,而是将文件在工作区的当前状态的快照记录到暂存区。下次 git commit 时,就会根据暂存区的快照来创建提交。
  • 功能相似命令的对比区分
    • git add .
      • 作用:添加所有当前目录及其子目录下已修改新建的文件到暂存区。
      • 注意不包括已删除的文件。在 Git 2.0 之前的版本,它也不处理目录重命名。
      • 适用场景:当你希望提交所有修改和新增的文件,且没有删除文件时。
    • git add -u (或 --update):
      • 作用:添加所有已修改已删除的文件到暂存区。
      • 注意不包括新建的未跟踪文件。
      • 适用场景:当你只关注现有文件的修改和删除,不希望将新文件包含在当前提交中时。
    • git add -A (或 --all):
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值