欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 旅游 > Git(二):基本操作

Git(二):基本操作

2025/6/19 20:58:22 来源:https://blog.csdn.net/weixin_74006549/article/details/148741071  浏览:    关键词:Git(二):基本操作

文章目录

  • Git(二):基本操作
    • 添加文件
    • 修改文件
    • 版本回退
    • 撤销修改
      • 情况一:工作区的代码还没有 add
      • 情况⼆:已经 add 但没有 commit
      • 情况三:已经 add 并且也 commit
    • 删除文件

Git(二):基本操作

添加文件

首先我们先来学习一个命令git status,其基本功能为:

  • 显示工作目录状态:git status 会列出当前工作目录中哪些文件被修改(modified)、未跟踪(untracked)或存在冲突(conflict)
  • 显示暂存区状态:显示哪些文件已暂存(staged)但未提交,以及哪些文件未暂存但已修改
  • 分支信息:输出当前分支名称及与远程分支的同步状态(如 “Your branch is up to date with ‘origin/master’”)

例如,我们在工作区中创建一个文件但并没有add,使用git status就会给出提示:file1并没有被追踪,同时暂存区中是干净的

在这里插入图片描述

我们add后不commit,再来看一下status:暂存区中有文件等待被commit

在这里插入图片描述

commit之后暂存区就干净了:

在这里插入图片描述

修改文件

首先,我们要明确一个概念:Git跟踪并管理的是修改,而非文件,这也是Git 比其他版本控制系统设计得优秀的主要原因之一

什么是修改?比如你新增了一行,这就是⼀个修改,删除了一行,也是一个修改,更改了某些字符,也是一个修改,删了一些又加了一些,也是一个修改,甚⾄创建一个新文件,也算一个修改

让我们将 ReadMe 文件进行一次修改,此时,仓库中的 ReadMe 和我们⼯作区的 ReadMe 是不同的, 使用git status 命令查看:

在这里插入图片描述

上⾯的结果告诉我们,ReadMe 被修改过了,但还没有完成添加与提交。目前,我们只知道文件被修改了,但不知道那里被修改了,这时就需要git diff命令出马了:

在这里插入图片描述

git diff [file] 命令⽤来显⽰暂存区和⼯作区⽂件的差异,显⽰的格式正是Unix通⽤的diff格式。也可以使⽤ git diff HEAD -- [file] 命令来查看版本库和⼯作区⽂件的区别

接下来只需要正常add和commit即可

版本回退

之前我们也提到过,Git 能够管理⽂件的历史版本,这也是版本控制器重要的能⼒。如果有⼀天你发现之前的⼯作做的出现了很⼤的问题,需要在某个特定的历史版本重新开始,这个时候,就需要版本回退的功能

执⾏ git reset 命令⽤于回退版本,可以指定退回某⼀次提交的版本。要解释⼀下“回退”本质是要将版本库中的内容进⾏回退,⼯作区或暂存区是否回退由命令参数决定:

git reset 命令语法格式为: git reset [--soft | --mixed | --hard] [HEAD]

  • –mixed 为默认选项,使⽤时可以不⽤带该参数。该参数将暂存区的内容退回为指定提交版本内容,⼯作区⽂件保持不变。
  • –soft 参数对于⼯作区和暂存区的内容都不变,只是将版本库回退到某个指定版本
  • –hard 参数将暂存区与⼯作区都退回到指定版本。切记⼯作区有未提交的代码时不要⽤这个命令,因为⼯作区会回滚,你没有提交的代码就再也找不回了,所以使⽤该参数前⼀定要慎重

在上面我们对ReadMe文件新增了一行“hello world!”,现在我们使用表格来展现:

选项工作区暂存区版本库
未操作hello git hello worldhello git hello worldhello git hello world
–softhello git hello worldhello git hello worldhello git
–mixed(默认)hello git hello worldhello githello git
–hardhello githello githello git

HEAD选项说明:

  • 可直接写成 commit id,表示指定退回的版本
  • HEAD 表示当前版本
  • HEAD^ 上⼀个版本
  • HEAD^^ 上上⼀个版本

也可以使⽤ 〜数字表示:

  • HEAD~0 表示当前版本
  • HEAD~1 上⼀个版本
  • HEAD^2 上上⼀个版本

接下来我们演示一下:ReadMe文件经修改后现在有两行,commit后master指向最后一次修改

在这里插入图片描述

接下来使用reset命令,带上hard选项,HEAD直接写成ReadMe文件第一次修改的commit id

在这里插入图片描述

我们发现ReadMe文件回退到了第一个版本,而且file1也被删除了,因为file1是在之后创建的

那我们要是后悔了怎么办?只需要把commit id改成modify ReadMe的:
在这里插入图片描述

我们发现ReadMe文件“回退”到了第二个版本,file1也回来了,HEAD重新指向了modify ReadMe

但是如果我们隔了几天重新登陆服务器,找不到对应的历史commit id怎么办?此时就用到了git reflog命令:

在这里插入图片描述

值得说的是,Git 的版本回退速度⾮常快,因为 Git 在内部有个指向当前分⽀(此处是master)的

HEAD 指针, refs/heads/master ⽂件⾥保存当前 master 分⽀的最新 commit id 。当我们

在回退版本的时候,Git 仅仅是给 refs/heads/master 中存储⼀个特定的version,可以简单理解

成如下⽰意图:

在这里插入图片描述

撤销修改

如果我们在我们的⼯作区写了很⻓时间代码,越写越写不下去,觉得⾃⼰写的实在是垃圾,想恢复到 上⼀个版本

情况一:工作区的代码还没有 add

我们在ReadMe文件中新增一行,不add到暂存区

在这里插入图片描述
第一种方法就是直接修改,但如果不记得新增代码是哪些呢?因此这种方式效率很低,而且容易出错,此时就需要用到git checkout -- [file]命令,git checkout -- [file] 命令可以让工作区的文件回到最近⼀次add 或commit 时的状态。要注意 git checkout -- [file] 命令中的 – 很重要,切记不要省略,⼀旦省略,该命令就变为其他意思了,后面我们再说

在这里插入图片描述

情况⼆:已经 add 但没有 commit

add后还是保存到了暂存区呢?怎么撤销呢?

在这里插入图片描述

让我们来回忆⼀下学过的 git reset 回退命令,该命令如果使用–mixed 参数,可以将暂存区 的内容退回为指定的版本内容,但⼯作区⽂件保持不变。那我们就可以回退下暂存区的内容了!!!

在这里插入图片描述

此时就变成了第一种情况,再使用git checkout -- [file] 命令就可以了

在这里插入图片描述

情况三:已经 add 并且也 commit

直接使用git reset --hard HEAD^ 命令回退到上⼀个版本!不过,这是有条件的,就是 你还没有把自己的本地版本库推送到远程(后面会讲)

在这里插入图片描述

我们使用表格对上面三种情况进行总结:

操作工作区暂存区版本库
git check – [filename]xxx code
git reset --mixedxxx codexxx code
git reset --hard HEAD^xxx codexxx codexxx code

注:xxx code是新增内容,空白表示未新增

删除文件

第一种方法:

  1. 在工作区中执行rm -f 文件名命令
  2. git add
  3. git commit

在这里插入图片描述

第二种方法:

  1. 在工作区中执行git rm 文件名命令
  2. git commit
    在这里插入图片描述

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词