1033 字
5 分钟
Git 版本控制

基础知识#

版本控制#

版本控制是指在软件开发过程中,对各种程序代码、配置文件及说明文档等文件变更进行管理的过程。它是软件配置管理的核心思想之一。版本控制的主要功能包括追踪文件的变更、并行开发、分支与合并、历史记录等。通过版本控制,可以记录文件的变更历史,确保不同开发者之间的协同工作,提高开发效率。

版本控制工具:

  • 集中式代表:SVN
  • 分布式代表:Git、mercurial

安装:Releases · git-for-windows/git (github.com)

文件区域#

  • 工作区:
    • .git所在目录,就是资源管理器中实际的目录
    • 这里的文件状态是 未跟踪(untracked,新文件)或 已修改(modified,修改过的文件)。
    • 你所有的编辑操作(用代码编辑器写代码)都发生在这里。
  • 暂存区:
    • .git/index,用于临时存放你的改动,通过git add暂存工作区修改后的文件
    • 允许你分批提交:你可以只选择工作区中的部分修改进行暂存,而不是一次性提交所有修改。
    • 暂存区中的文件状态是 已暂存(staged)。
    • **暂存区的价值:**允许更精细地控制提交细粒度。例如需要修复bug-A和bug-B,修复好bug-A后先提交暂存区,等所有bug都修复后再提交,而非修一个bug提交一次。
  • 本地仓库:.git/objects,包含完整的项目里是和元数据,是git存储代码和版本的主要位置
  • 远程仓库

⽂件状态#

  • 未跟踪(Untracked)未通过 git 管理的文件
  • 已修改(Modified)修改了但是没有保存到暂存区的⽂件
  • 已暂存(Staged) 修改后已经保存到暂存区的⽂件
  • 已提交(Committed)把暂存区的⽂件提交到本地仓库后的状态

配置命令#

配置用户名邮箱

Terminal window
git config --global user.name [用户名称]
git config --global user.email [用户邮箱]

其中--global处

  • 若省略则为本地,只对本地仓库有效
  • --global,全局配置,对所有仓库有效
  • --system,系统配置,对所有用户有效,一般不使用

查看配置

Terminal window
git config --global --list

基础命令#

初始化:省略project-name则在当前⽬录创建 ,创建完成后目录中会生成.git文件

Terminal window
git init <project-name>

检查仓库

Terminal window
git status // 查看状态
git log // 查看提交日志
git log --oneline
git log --gragh --oneline --decorate --all
git ls-files // 查看暂存区文件

查看修改内容

Terminal window
git diff // 比较工作区和暂存区之间的差异
git diff HEAD // 比较工作区和版本库之间的差异
git diff --cached // 比较暂存区和版本库之间的差异
git diff [hash1] [hash2] // 比较两个提交or分支之间的差异
git diff HEAD^ HEAD
git diff HEAD~2 HEAD
git diff [hash1] [hash2] [fileName] // 比较某个文件在两个提交之间的差异

远程仓库

Terminal window
git remote -v // 列出所有关联的远程仓库
git remote add/remove // 管理远程仓库
git clone // 克隆远程仓库

操作一图流-时序图#

sequenceDiagram
    participant WD as 工作区<br/>Working Directory
    participant SA as 暂存区<br/>Staging Area/Index
    participant LR as 本地仓库<br/>Local Repository
    participant RR as 远程仓库<br/>Remote Repository
    
    Note over WD,RR: 提交代码流程
    WD->>SA: git add
    SA->>LR: git commit
    LR->>RR: git push
    
    Note over WD,RR: 更新代码流程
    RR->>LR: git clone/fetch/pull
    LR->>WD: git checkout/merge
    
    Note over WD,LR: 撤销操作
    SA->>WD: git restore --staged
    LR->>WD: git reset --hard
    LR->>SA: git reset --mixed
    
    LR-->>LR: git reset --soft
    LR->>LR: git revert

子图:

  • git rm 取消追踪并删除工作区文件, --cache 仅取消追踪
  • git clean 清理工作区所有未跟踪文件
sequenceDiagram
    participant WD1 as 工作区-未跟踪<br/>Untracked
    participant WD2 as 工作区-已跟踪<br/>Tracked
    
    WD1->>WD2: git add
    Note over WD1,WD2: 移除文件
    WD2->>WD1: git rm
    WD2-->>WD1: git rm --cache
    WD1->>WD1: git clean

git reset三种模式,使用场景

  • soft:想修改最后一次提交的信息或内容,然后重新 git commit
  • mixed:想撤销提交,但重新选择哪些文件提交,或修改提交内容
  • hard:完全放弃最后一次提交及其所有修改
sequenceDiagram
    participant WD as 工作区<br/>Working Directory
    participant SA as 暂存区<br/>Staging Area/Index
    participant LR as 本地仓库<br/>Local Repository
    participant LR2 as 上个版本<br/>HEAD~1
    
    Note over WD,LR2: Git Reset 三种模式的影响范围
    
    rect rgb(200, 220, 240)
        Note over WD,LR2: git reset --soft HEAD~1
        LR-->>LR2: 移动 HEAD 指针
        Note right of LR: 暂存区不变<br/>工作区不变
    end
    
    rect rgb(220, 240, 200)
        Note over WD,LR2: git reset --mixed HEAD~1 (默认)
        LR-->>LR2: 移动 HEAD 指针
        LR->>SA: 重置暂存区
        Note over WD,SA: 工作区保留修改,暂存区还原为HEAD~1

    end
    
    rect rgb(240, 200, 200)
        Note over WD,LR2: git reset --hard HEAD~1
        LR-->>LR2: 移动 HEAD 指针
        LR->>WD: 重置工作区
        LR->>SA: 重置暂存区
        Note over WD,SA: ⚠️ 工作区与暂存区均还原为HEAD~1<br/>不可恢复
    end

忽略文件#

在仓库目录配置 .gitignore 文件,可配置哪些文件无需版本控制。

以下文件需要忽略:

  • 日志文件
  • 编译产生的中间文件,例如 .class .o
  • 涉及敏感信息的文件

配置语法:

# 使用sharp符号注释
*.txt # 忽略所有拓展名为txt的文件
!lib.txt # 但不包括lib.txt
/doc # 仅检查doc文件夹之前的进行忽略,不忽略doc文件夹
tmp/ # 忽略tmp目录下所有
Git 版本控制
https://blog-l7wd3.pages.dev/posts/git/
作者
L7WD3-Xiao
发布于
2026-03-10
许可协议
CC BY-NC-SA 4.0

分享文章

生成精美分享图或复制链接,与更多人分享本文。

继续阅读

换条路线

从其他文章中稳定抽取

最后更新于 ,距今已过 230 天

部分内容可能已过时