Git基本操作

一、什么是Git

Git是目前最主流的版本控制器,当我们修改了仓库中的文本文件时,如果是文本文件,修改后会新增一行git,如果是二进制文件,例如图片视频这种,我们只能知道他被修改过了,比如文件的大小从200kb变为100kb,但是具体修改了什么内容我们是没办法知道的。

Git的安装

我们可以使用git --version指令来查看我们本地服务器是否安装了git,如果显示出git的版本说明已经安装过某个版本的git。

如果没有安装git,可以输入下面的指令

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

这条指令会为我们下载对应的git包

二、创建和配置本地仓库

在开始使用 Git 之前,我们需要先在本地创建一个仓库。所谓仓库(Repository),可以理解为一个被 Git 持续跟踪和管理的目录,它既包含我们实际编辑的项目文件,也包含 Git 用来记录版本历史的隐藏目录 .git。创建本地仓库通常有两种方式:一种是从零开始初始化一个新仓库,另一种是从远程仓库克隆一个已有仓库。

如果是从零开始,先进入项目所在的目录,然后执行初始化命令:

bash 复制代码
mkdir my-project
cd my-project
git init

执行 git init 之后,当前目录下会生成一个隐藏的 .git 目录,此时这个目录就正式成为一个 Git 仓库了。需要注意的是,.git 目录中保存着版本库的全部元数据,包括提交记录、分支信息、配置信息等,因此不要随意删除或手动修改其中的内容,否则可能造成版本历史损坏。

如果项目已经存在于远程服务器上,则可以直接克隆到本地:

bash 复制代码
git clone https://example.com/team/my-project.git

克隆完成后,Git 会自动创建同名目录,并把远程仓库的完整历史一并拉取到本地,同时默认配置好远程仓库地址,后续可以直接进行拉取和推送操作。

仓库创建好之后,我们还需要为我们的本地仓库新增两个配置项,这两个配置项用于配置提交者身份,如果没有配置提交者身份,Git就无法正确记录每一次提交的作者信息。配置分为全局配置和仓库级配置两种:全局配置对当前用户的所有仓库生效,仓库级配置只对当前仓库生效。常用的配置命令如下:

bash 复制代码
git config --global user.name "你的名字"
git config --global user.email "你的邮箱"
git config --global core.editor "vim"

其中 user.name 和 user.email 会写入每一次提交记录,建议填写真实且可辨识的信息。而core.editor 用于指定编写提交信息时默认打开的编辑器。如果只想对当前仓库生效,去掉 --global 参数即可。

配置完成后,可以通过以下命令查看当前生效的配置,确认信息是否正确:

bash 复制代码
git config --list//或者git config -l
git config user.name
git config user.email

三、文件的增删查改

3.1 将文件添加到git仓库中

git仓库共有三个部分,分别为版本库、工作区和暂存区。工作区中的文件通过add之后会被添加到暂存区,再通过commit后添加到版本库中。所以一个文件被添加到版本库中需要两个操作,一个是add,一个是commit。只有被存入版本库中的文件才能被git所管理。

而将文件添加到暂存区中我们需要使用到的指令是:

bash 复制代码
git add 文件名

当我们想要将当前工作区中的所有文件都添加到暂存区中,我们可以使用指令:

bash 复制代码
git add .

这个.就代表了当前工作路径下的所有文件。

当我们需要将暂存区中的文件添加到版本库中,我们可以使用的指令是

bash 复制代码
git commit -m "提交说明文字"

需要注意的是,每次在将文件提交至仓库时我们都需要详细描述一下我们这次提交的文件具体修改了什么内容,方便我们后续进行查看和版本的回退。

对于已经被git追踪过的旧文件(即前面已经add添加到过暂存区中的文件),我们可以直接使用指令:

复制代码
git commit -am "提交说明文字"

-a表示--all,带上这个字段会自动把已追踪文件的修改添加到暂存区,能够省去手动git add。如果新创建或者从来没有add过的文件,-a不会管,新增文件需要单独使用git add手动进行添加。

3.2 对文件进行修改

我们可以通过vim编辑器来对工作区的文件进行修改,修改完成后再使用git add来将修改后的文件加入暂存区。

3.3 对修改记录的查看

我们可以使用下面的指令来查看所有时间从近到远的提交记录

bash 复制代码
git log
git log --pretty=oneline

带上--pretty=online表示每条提交一行,显示完整 40 位 commit 哈希

同时,我们会发现,.git/refs/heads/master路径下的master存放的是最近一次提交的commit号

我们还可以通过 git status 查看仓库当前的状态,例如当前位于哪个分支、有哪些文件被修改、哪些文件尚未被跟踪等。这是日常开发中使用频率最高的命令之一,建议在每次提交前都先执行一次,确认改动的范围符合预期。

bash 复制代码
git diff 文件名
git diff HEAD -- 文件名

使用git diff指令可以查看目前暂存区和我们工作区中的某个文件的区别,而带上HEAD后就是用于查看当前暂存区和版本库之间的区别。

git diff:

git diff HEAD --:

3.4 删除仓库中的文件

场景一:直接删除

使用指令

bash 复制代码
 git rm test.txt git commit -m "删除 test.txt"

这个指令等价两步:系统rm删除文件 + git add这个删除改动。首先使用git rm test.txt将工作区文件直接删掉,同时把删除记录放进暂存区,然后使用git commit来提交这条删除到本地版本库

场景二:只让Git不再跟踪这个文件,本地文件保留不动(比如删配置、密钥)

bash 复制代码
git rm --cached test.txt git commit -m "取消跟踪 test.txt,保留本地文件"

带上字段--cached后不会删电脑上的文件,而只是把它从Git的版本追踪里移除,之后这个文件修改git不再管它,一般会配合.gitignore使用,防止以后又被add进来。

四、版本回退和撤销修改

版本回退

我们可以使用git reset指令来进行版本的回退:

bash 复制代码
git reset [--soft|--mixed|--hard] [HEAD]

git reset有三个选项分别是soft、mixed、hard,其中mixed是默认选项,如果后面不带选项则默认使用的是mixed。三个选项的对比如下表所示:

参数 版本库 (HEAD) 暂存区 (index) 工作区 (文件) 核心作用 适用场景
--soft 回退 不变 不变 只移动 HEAD 指针,暂存区、工作区所有改动原样保留 撤销 commit,不想丢修改,重新组织提交(重新commit)
--mixed(默认,不加参数就是它) 回退 重置(和回退后 commit 对齐) 不变 移动 HEAD + 重置暂存区,改动回到工作区,变成未 add 状态 撤销commit + 撤销git add,代码还在,重新 add
--hard 回退 重置 重置 HEAD、暂存区、工作区全部强制和目标 commit 保持一致 丢弃所有后面的改动,彻底回到指定版本

--soft选项只回退提交,修改还保存在暂存区,而mixed选项会将版本库和暂存区的内容一同回退,hard选项会将工作区的文件一并重置。/所以在实际的项目工程实践中,--hard选项应该慎重使用。

使用示例如下:

--soft,回退了版本库中的内容,暂存区中还保存着修改后的ReadMe

--mixed,暂存区中的内容被回退了

--hard,工作区中的内容也一并被回退了:

git reset HEAD表示回退到当前版本,带上一个^表示回退到上一个版本,带上两个^^表示回退到前两个版本。

git reset本质其实是移动当前分支的分支指针(比如 main/master)指向别的 commit,HEAD 跟着分支指针走。

撤销修改

使用指令:

bash 复制代码
git checkout --文件名

可以撤销对文件的修改,但是要记得要带两个横线,不然这个checkout就是另外一个含义。需要注意的是,这条指令只能撤销工作区的修改,已经添加到暂存区的和已经提交的文件无法撤销修改,只能使用git reset进行版本回退。

相关推荐
芯门41 分钟前
GitHub「用好 AI」工具生态全景:2409 个仓库 Star 排行调研(2026-11)
人工智能·github
2分钟速写快排10 小时前
孔乙己的茴字有多少种写法?|AI 对话实时通信的三种实现
前端·javascript·github
wangruofeng14 小时前
同一行代码,百种渲染:Asuka、React Native 与 Flutter 跨平台渲染机制深度拆解
前端·github
杨凯凡15 小时前
IT日报|2026-11-13:GitHub 大规模凭据攻击、Signal 形式化验证、Claude 新模型与 AI 安全诉讼
人工智能·安全·github
liuzheng662118 小时前
我给 Agent 测试注入了 72 种谎话,它抓住了 44 种
github
feasibility.1 天前
一物降一物?AI逆向没有终局:REA拆App,BLA设套,LASIK清场
人工智能·爬虫·github·逆向·skill·rea
wno7041 天前
常用的Git命令清单
大数据·git·elasticsearch
真上帝的左手2 天前
3. 代码管理-Git-进阶
git·源代码管理
真好啊又活了一天2 天前
服务器和虚机配置IPV6
运维·服务器·github