Git使用

Git原理与使用------基础篇总结

一、什么是版本控制器

版本控制器是一个能让你了解文件历史以及发展过程的系统,通俗讲就是可以记录工程的每一次改动和版本迭代的管理系统,同时方便多人协同作业。

目前最主流的版本控制器就是Git。

注意事项

Git只能跟踪文本文件的改动(如TXT、网页、程序代码等),可以告诉你每次改动的具体内容(比如在第5行加了一个单词,在第8行删了一个单词)。

而图片、视频等二进制文件,版本控制系统只能知道文件大小变了,但没法跟踪具体改了什么。


二、Git安装

Linux(CentOS)

bash 复制代码
sudo yum -y install git
git --version          # 查看版本

Linux(Ubuntu)

bash 复制代码
sudo apt-get install git -y
git --version

Windows

参考相关安装教程即可。


三、Git基本操作

1. 创建本地仓库

bash 复制代码
git init

执行后,当前目录下会多出一个.git的隐藏目录,这就是Git用来跟踪管理仓库的目录,不要手动修改里面的文件

2. 配置用户信息

安装Git后首先要设置用户名称和email地址:

bash 复制代码
git config [--global] user.name "Your Name"
git config [--global] user.email "email@example.com"
  • --global:可选,表示这台机器上所有Git仓库都使用这个配置
  • 如果不加,只对当前仓库生效

查看配置:

bash 复制代码
git config -l

删除配置:

bash 复制代码
git config [--global] --unset user.name
git config [--global] --unset user.email

四、工作区、暂存区、版本库

这是Git最核心的概念,必须理解!

概念 说明
工作区 电脑上你要写代码或文件的目录
暂存区(stage/index) 存放在.git/index文件中,也叫索引
版本库(repository) 工作区中的.git目录,Git用它来管理所有文件

三者关系图

复制代码
工作区 → git add → 暂存区 → git commit → 版本库
  • 在工作区新增/修改文件后,文件还没有被Git管理
  • 执行git add后,文件被添加到暂存区
  • 执行git commit后,暂存区的内容被写入版本库

关键理解:通过新建或粘贴进目录的文件,只是在工作区新增了文件。必须要通过git addgit commit才能将文件添加到仓库中进行管理!


五、添加文件

git add ------ 添加到暂存区

bash 复制代码
git add [file1] [file2]     # 添加一个或多个文件
git add [dir]               # 添加指定目录(包括子目录)
git add .                   # 添加当前目录下的所有文件改动

git commit ------ 提交到本地仓库

bash 复制代码
git commit -m "message"              # 提交暂存区全部内容
git commit [file1] [file2] -m "msg"  # 提交暂存区的指定文件

注意-m后面的描述信息绝对不能省略!这是给人看的提交说明。

示例

bash 复制代码
# 第一次提交
vim ReadMe
git add ReadMe
git commit -m "commit my first file"

# 多次add,一次commit
touch file1 file2 file3
git add file1
git add file2
git add file3
git commit -m "add 3 files"

查看提交历史

bash 复制代码
git log                          # 显示详细提交日志
git log --pretty=oneline         # 简洁显示(一行一个提交)

输出的长串数字是commit id(版本号),由SHA1计算得出,不是简单的1、2、3递增数字。


六、查看.git目录

理解.git目录有助于深入理解Git原理:

bash 复制代码
.git/
├── HEAD          # 默认指向master分支的指针
├── index         # 暂存区
├── refs/
│   └── heads/
│       └── master  # 保存当前master分支最新的commit id
└── objects/      # Git的对象库,存放所有版本库对象

关键文件内容

bash 复制代码
# HEAD指向当前分支
cat .git/HEAD           # 输出: ref: refs/heads/master

# master分支指向的最新commit
cat .git/refs/heads/master   # 输出: 23807c5369...(commit id)

查看对象内容

bash 复制代码
git cat-file -p [commit_id]   # 查看提交对象
git cat-file -p [tree_id]     # 查看树对象
git cat-file -p [blob_id]     # 查看文件内容对象

七、修改文件

Git跟踪的是修改,而非文件本身。修改包括:新增一行、删除一行、更改字符、创建新文件等。

查看状态

bash 复制代码
git status    # 查看工作区和暂存区的状态

查看差异

bash 复制代码
git diff [file]                    # 显示暂存区和工作区文件的差异
git diff HEAD -- [file]            # 显示版本库和工作区文件的区别

提交流程

bash 复制代码
git add ReadMe
git commit -m "modify ReadMe"

八、版本回退

git reset命令

bash 复制代码
git reset [--soft | --mixed | --hard] [HEAD]
参数 暂存区 工作区 说明
--soft 不变 不变 只回退版本库
--mixed(默认) 回退 不变 暂存区退回指定版本
--hard 回退 回退 工作区也会回退,谨慎使用!

HEAD的表示方式

写法 含义
HEAD 当前版本
HEAD^ 上一个版本
HEAD^^ 上上一个版本
HEAD~n 往上n个版本
commit id 指定版本

示例

bash 复制代码
# 回退到上一个版本(工作区也回退)
git reset --hard HEAD^

# 查看所有操作记录(找回被回退的commit id)
git reflog

# 使用部分commit id恢复到指定版本
git reset --hard d95c13f

版本回退的本质

Git内部有一个指向当前分支的HEAD指针,回退版本时,Git仅仅是修改refs/heads/master中存储的commit id。


九、撤销修改

情况一:工作区修改,还没有add

bash 复制代码
git checkout -- [file]    # 丢弃工作区的修改

情况二:已经add,但还没有commit

bash 复制代码
git reset HEAD [file]     # 将暂存区回退(--mixed是默认参数)
git checkout -- [file]    # 再丢弃工作区修改

情况三:已经commit,但还没有push

bash 复制代码
git reset --hard HEAD^    # 回退到上一个版本

注意:如果已经推送到远程仓库,就比较麻烦了。


十、删除文件

误删恢复

bash 复制代码
git checkout -- [file]    # 从版本库恢复被删除的文件

确实要删除

bash 复制代码
git rm [file]             # 从暂存区和工作区删除
git commit -m "delete file"  # 提交删除操作

核心命令速查表

命令 作用
git init 初始化本地仓库
git config 配置用户信息
git add 添加文件到暂存区
git commit -m "msg" 提交到本地仓库
git status 查看仓库状态
git log 查看提交历史
git reflog 查看所有操作记录
git diff 查看文件差异
git reset --hard HEAD^ 版本回退
git checkout -- [file] 丢弃工作区修改
git rm 删除文件

理解模型

复制代码
工作区(写代码的地方)
    ↓ git add
暂存区(临时存放区)
    ↓ git commit
版本库(永久存储)

核心思想:所有对文件的修改,都要经过"工作区 → 暂存区 → 版本库"这条路径,才能真正被Git管理起来。这也是Git与其他版本控制系统的重要区别。

相关推荐
小李不困还能学2 小时前
GitBash的保姆级安装教程
git
摆烂菜鸡沧9963 小时前
【自用整理】本地关联GitHub多账号设置
git·github
lisanmengmeng3 小时前
工作中的Git使用实践(三)
git
东北甜妹18 小时前
GitLab配置步骤
git
恋喵大鲤鱼21 小时前
git add
git·git add
jiayong231 天前
CI/CD深度解析01-核心概念与原理
运维·git·ci/cd
天麓1 天前
git 切换用户和邮箱的方法
git
科技道人1 天前
Launcher allapps界面顶部推荐的app
git·github·launcher·allapps
云水一下1 天前
平行宇宙的魔法——Git 分支与合并的艺术
git