Git基本操作

前言: 本文将简单介绍一下Git的基本操作

一、 仓库的创建与配置

首先从如何让 Git 开始管理项目讲起。

1.1 Git安装

首先是在我们的电脑上上安装Git, 这里我就以我的云服务器为例

需要通过 SSH 工具(如 Xshell、Putty 或终端)登录到你的云服务器。根据你服务器的操作系统,运行对应的安装命令:

1. Ubuntu / Debian 系统

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

2. CentOS / RHEL 系统

bash 复制代码
sudo yum install git -y
# 如果是较新的 CentOS Stream 或 Rocky Linux,也可以使用 dnf:
# sudo dnf install git -y

如果不知道自己的系统类型,也可以执行以下命令来查看系统

bash 复制代码
cat /etc/os-release

3. 验证安装

安装完成后,输入以下命令检查 Git 版本,如果能正确显示版本号,说明安装成功:

bash 复制代码
git --version

由于是在我的云服务上练习,我这里为我设置了root权限, 如果是在本地电脑环境下测试的话,对于风险命令要谨慎执行,看清再按enter哦~~

1.2 创建本地仓库

管理仓库时一定要有仓库 \o/\o/\o/

  • 核心命令git init

  • 操作细节 :该命令必须在具体的文件目录下执行 。执行后,当前目录下会生成一个名为 .git 的隐藏目录 .注意不要在我们的root根目录下执行该命令,否则会让root目录变为Git仓库,不利于代码管理~~

  • 注意事项.git 目录是 Git 用来跟踪管理仓库的,绝对不要手动修改里面的文件,否则容易把仓库破坏掉 。

bash 复制代码
# 1. 创建一个专门存放你代码项目的文件夹(比如叫 my-project)
mkdir my-project 
# 2. 进入这个文件夹 
cd my-project 
# 3. 在这里面重新初始化 Git
git init

1.3 配置用户信息

在安装完 Git 后,首先必须设置用户名称和 Email 地址,这是非常重要的初始化步骤 。

  • 配置命令

    • 设置用户名:git config [--global] user.name "Your Name"

    • 设置邮箱:git config [--global] user.email "email@example.com"

  • 参数说明--global 是一个可选参数 。如果使用该选项,表示这台机器上所有的 Git 仓库都会使用这个配置 。如果希望在不同仓库使用不同的信息,可以不加 --global,但执行命令时必须在对应的仓库目录内 。

  • 查看与删除配置

    • 查看当前配置:git config -l

    • 删除对应配置:git config [--global] --unset user.nameuser.email

二、 核心概念:工作区、暂存区与版本库

这是理解 Git 运作机理的基本功,也是我们在学习Git的版本控制前必须要掌握的知识

  • 工作区(Working Directory):电脑上实际编写代码或存放文件的目录 。

  • 暂存区(Staging Area / Index) :一般存放在 .git/index 文件中,有时也被称为索引(index) 。

  • 版本库(Repository) :工作区中的隐藏目录 .git 。它包含了暂存区,以及 Git 自动创建的唯一 master 分支和指向该分支的 HEAD 指针 。

版本库中的文件挂载在目录树中,通过HEAD头指针遍历整个目录树就能拿到我们commit的文件

三大区域的流转关系 : 1. 当对工作区修改或新增的文件执行 git add 时,暂存区的目录树会被更新,同时文件内容会被写入到对象库(.git/objects)中 。 2. 当执行 git commit 时,master 分支会做相应更新,暂存区的目录树才会被真正写到版本库中 。 3. 核心结论 :仅仅在本地目录新建或粘贴文件,并不能让仓库管理它。文件必须经过 git addgit commit 两个步骤,才算真正添加到了仓库中 。

三、 文件基础管理(增、改、查、删)

3.1 添加文件

  • 添加至暂存区 (git add)

    • 添加一个或多个指定文件:git add [file1] [file2]

    • 添加指定目录(含子目录):git add [dir]

    • 添加当前目录下的所有文件改动:git add .

  • 提交至本地仓库 (git commit)

    • 提交暂存区全部内容:git commit -m "message"

    • 提交暂存区的指定文件:git commit [file1] [file2] ... -m "message"

    • 提示-m 选项后面的提交描述信息绝对不能省略,它是用来记录提交细节、方便人类阅读的 。

    • 技巧 :在实际开发中,可以多次执行 git add 不同的文件,最后只需执行一次 git commit 即可将暂存区的所有修改一同提交 。

3.2 查看状态与差异

  • 状态查看git status 命令用于查看自上次提交之后,是否有文件被再次修改或未被添加/提交 。

如果工作区和暂存区中同时存在修改文件的话 ,git status 会使用红色和绿色来把他们全部标注出来

  • 差异对比 (git diff)

    虽然使用git status 可以得知哪些文件发生的修改操作,但是如果我们想要知道文件做出来何种修改时,我们就该使用git diff命令了

    • git diff [file]:显示暂存区和工作区文件之间的差异(Unix 通用 diff 格式) 。

    • git diff HEAD -- [file]:查看版本库与工作区文件之间的区别 。

3.3 查看历史提交记录

  • 基本查看git log 可以查看从最近到最远的提交日志,包括 SHA1 计算出来的十六进制巨大数字(即版本号 commit id)、作者、日期以及日志消息 。

  • 精简单行查看 :如果觉得输出信息太多眼花缭乱,可以加上参数:git log --pretty=oneline 。或者是更简洁的git log --oneline

3.4 删除文件

在 Git 中,删除同样被视为一种"修改操作" 。如果直接使用系统命令 rm file 删除了工作区文件,会导致工作区和版本库不一致 。

  • 情况一:不小心误删 :可以使用 git checkout -- file 让工作区文件恢复到上一次 add 或 commit 的状态 。

  • 情况二:确实要从版本库中删除 :使用 git rm [file] 将文件从暂存区和工作区中一同删除,随后执行 git commit 提交修改 。

四、 版本回退与撤销修改(核心难点)

想象一下你目前手上有一个项目,你修改之后发现最终成效还不如先前版本的,这时候你想要撤销修改操作,也就是想要"悔棋"怎么办?

在 Git 的日常使用中,"撤销修改(Undo Changes)""版本回退(Rollback/Reset)"是两颗核心的"后悔药"。

4.1 版本回退 (git reset)

版本回退的核心在于:"代码已经 Commit 了,我想时光倒流。" 是把版本库中提交的文件进行回溯操作

Git 的版本回退速度非常快,本质上只是改变了指向当前分支的指针(如 refs/heads/master)中存储的 commit id 。

  • 基本语法git reset [--soft | --mixed | --hard] [HEAD]

假设我们现在有三个提交历史: Commit 1 (旧) -> Commit 2 (稳) -> Commit 3 (当前有Bug的最新提交) 你想把版本退回到 Commit 2

1. git reset --soft <Commit-ID> (温柔回退)

  • 底层动作 :仅仅把 HEAD 指针移动到 Commit 2

  • 结果Commit 3 里的代码改动被保留了下来 ,并且自动放进了暂存区 (绿色,相当于你刚刚做完 git add 的状态)。

  • 适用场景 :你刚做了一个 Commit,突然发现注释写错了,或者少提交了一个文件。你可以 --soft 回退一下,改改注释或补上文件,然后重新 Commit。

2. git reset --mixed <Commit-ID> (默认回退)

  • 底层动作 :把 HEAD 指针移动到 Commit 2,并重置暂存区。

  • 结果Commit 3 里的代码改动被保留了下来 ,但放进了工作区 (红色,变成了未暂存状态)。如果不带参数直接运行 git reset,默认就是它。

  • 适用场景 :你连续做了好几次糟糕的提交,想把这些提交的代码全部混在一起重新整理、重新分批 git add 提交。

3. git reset --hard <Commit-ID> (铁腕回退)

  • 底层动作 :把 HEAD 指针移动到 Commit 2,同时清空暂存区和工作区。

  • 结果Commit 3 以来写的所有代码彻底物理消失 ,你的电脑目录会瞬间变回 Commit 2 当时的样子。

  • 适用场景:当前这个方向彻底搞砸了,你确信过去的那个版本才是对的,当下的代码一秒钟都不想看到。

在版本回退中我们需要用到Commit ID ,但是如果我们提交次数太多了,或者提交间隔时间太长,如何在海量的日志后缀找到需要的Commit ID呢?

这时候如果你只记得某个改动跟 file1 有关,想在浩如烟海的日志中单独找出针对它的提交记录,可以在 git log 后面加上 --文件名

bash 复制代码
git log --oneline -- file1

注意-- 与文件名之间有一个空格。

效果 :Git 会瞬间帮你过滤掉其他几百个文件的无关提交,只打印出与 file1 发生过关系的 Commit ID。日志量会从几千行瞬间暴降到几行,你一眼就能定位到需要的 Commit ID。

4.2 撤销修改的三种场景

场景一:代码仅在工作区修改,还没有 git add

使用 git checkout -- [file] 命令,让工作区文件回到最近一次 add 或 commit 时的状态 。_注意:其中的 -- 非常关键,省略后会变成其他意思

场景二:代码已经 git add 到了暂存区,但还没有 git commit

  • 第一步:使用 git reset HEAD [file](可以不添加版本回退级别,利用默认的 --mixed 参数)回退暂存区,此时工作区代码保持不变 。

  • 第二步:执行 git checkout -- [file] 彻底丢弃工作区的修改 。

场景三:代码已经 git commit 到了本地仓库

  • 直接使用 git reset --hard HEAD^ 回退到上一个版本 。
  • 前提条件:这部分本地版本库的代码还没有被推送到远程仓库 。

以上就是有关Git基本操作的使用和简单介绍,如有纰漏还请大佬指出~~

相关推荐
Irissgwe9 小时前
三、Git 文件状态管理:add、commit、status 和 diff
git
Ws_13 小时前
Git + Gerrit 第三课:分支、切换与合并
git·elasticsearch
xlq2232214 小时前
6.git
git
Drache_long14 小时前
Git命令概述
git
console.log('npc')14 小时前
修改git中commit内容
git
love8888_cnsd15 小时前
Git & Linux 速查表
java·linux·git·后端·elasticsearch
恋喵大鲤鱼1 天前
git checkout
git·git checkout
知识汲取者1 天前
Git撤销操作全解析:revert、undo与drop commit的区别与应用
git
cxxx171 天前
【同步Overleaf, Github】
git·overleaf