【Git】Git基本操作-2

简介: 【Git】Git基本操作-2

【Git】Git基本操作-1:https://developer.aliyun.com/article/1430665

6. 修改文件

当我们对文件做了修改的话,需要重新使用 add 操作和 commit 操作,将修改的文件添加进版本库中。

什么是修改?⽐如你新增了⼀⾏,这就是⼀个修改,删除了⼀⾏,也是⼀个修改,更改了某些字符,也是⼀个修改,删了⼀些⼜加了⼀些,也是⼀个修改,甚⾄创建⼀个新⽂件,也算⼀个修改。

此时,仓库中的 ReadMe 和我们⼯作区的ReadMe是不同的,如何查看当前仓库的状态呢? git status 命令⽤于查看在你上次提交之后是否有对⽂件进⾏再次修改。

使用 git status 显示出来的数据表示 ReadMe 文件被修改,并且当前文件等待被 add。

使用 add 之后再查看仓库状态可以看到 ReadMe 文件被修改,并且这个文件等待被 commit。

当修改文件之后,我们又如何查看我们修改的内容吗?当然可以,虽然我们可以直接查看文件中的内容,然后对比差异,但是如果文件修改的内容较多且间隔时间较长,我们又该如何区别呢?

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

diff --git a/ReadMe b/ReadMe:这行表示正在查看ReadMe文件在两个不同版本之间的差异。

index 6b15c4f…7945298 100644:这行提供了有关文件的元数据。index 6b15c4f…7945298表示原始版本的文件内容由SHA-1哈希值6b15c4f标识,而新版本的文件内容由7945298标识。100644是文件的权限模式,表示这是一个普通文件。

— a/ReadMe:这行表示原始版本的文件是ReadMe,位于a/目录下。

+++ b/ReadMe:这行表示新版本的文件是ReadMe,位于b/目录下。

@@ -1,3 +1,4 @@:这行表示差异的开始。-1,3表示原始文件的开始到第3行(不包括第3行),而+1,4表示新文件的开始到第4行(不包括第4行)。

hello git、hello git、hello world:这些行显示了原始文件的内容。

+hello world:这行表示在新文件中添加了“hello world”这一行。

7. 版本回退

前面说了 Git 能够管理文件的历史版本,这也是版本控制器的重要能力,就相当于我们前面的项目规划书,就类似前面的项目规划书,因为版本的管理,已经存在了三个版本的规划书,老板说让你在第二个版本的基础上进行修改,那么这时候你只需要拿出第二个版本的规划书的原稿就可以了。

如果只是回退工作区中的文件的话,可以直接用 git checkout [fikeName]来回退。

那么在 Git 中使用 git reset 命令用于版本的回退。git reset 命令语法格式为: git reset [--soft | --mixed | --hard] [HEAD]

  • –mixed 为默认选项,使⽤时可以不⽤带该参数。该参数将暂存区的内容退回为指定提交版本内容,工作区⽂件保持不变。
  • –soft 参数对于工作区和暂存区的内容都不变,只是将版本库回退到某个指定版本。
  • –hard 参数将暂存区与工作区都退回到指定版本。切记工作区有未提交的代码时不要⽤这个命令,因为工作区会回滚,你没有提交的代码就再也找不回了,所以使⽤该参数前⼀定要慎重。
  • HEAD 说明:
  • 可直接写成 commit id,表⽰指定退回的版本
  • HEAD 表⽰当前版本
  • HEAD^ 上⼀个版本
  • HEAD^^ 上上⼀个版本
  • 以此类推…
  • 可以使用 〜 数字表示:
  • HEAD~0 表⽰当前版本
  • HEAD~1 上⼀个版本
  • HEAD^2 上上⼀个版本
  • 以此类推…

我们先准备下数据:

假设我们现在需要将该文件恢复到第二次提交的情况,那么就需要更改工作区、暂存区和版本库中的数据,那么就需要用到 --hard 选项。

通过观察test1文件中的内容和 git log --pretty=oneline 显示的数据我们可以看到当前 test1 的版本已经回到了第二次的版本了。

如果我们现在又想回到第三个版本的话,该怎么办呢?前面说了 git reset 命令后面的参数可以是 commit id,所以我们就可以将后面的参数改为第三次提交的 commit id。

虽然我们可以使用 commit id 回退到指定的版本,但是如果我们因为工作时间太长,不能够直接从终端找到 commit id 或者 commit id 丢失了之后的话,别着急,我们可以使用 git reflog 补救一下,该命令⽤来记录本地的每⼀次命令。

这里并没有出现前面类似的 commit id ,而是出现了 1bb6079 这样的数字,那么这是什么呢?这其实是 commit id 中的一部分,通过 commit id 的这一部分是可以回到指定的版本的。

值得说的是,Git 的版本回退速度⾮常快,因为 Git 在内部有个指向当前分⽀(此处是master)的 HEAD 指针, refs/heads/master 文件⾥保存当前 master 分⽀的最新 commit id 。当我们在回退版本的时候,Git 仅仅是给 refs/heads/master 中存储⼀个特定的version,可以简单理解成如下⽰意图:

当需要回退的时候,只需要更改 .git/refs/heads/master 中存储的 version 版本就可以了。

使用 git reset 的前提是,在 commit 之后没有使用 push 操作将本地仓库的文件提交到远程仓库中,如果已经 push 将本地仓库的文件提交到远程仓库的话,再使用 git reset 的话,远程仓库的文件是没有修改的,而如果有远程仓库的话,我们最终看的还是远程仓库的文件,所以使用 git reset 的前提是没有将本地仓库的文件 push 到远程仓库之前。


相关文章
|
6月前
|
Linux 开发工具 git
【Git】Git基本操作-1
【Git】Git基本操作-1
|
缓存 开发工具 git
开心档之Git基本操作
开心档之Git基本操作
43 0
|
6月前
|
存储 开发工具 git
Git的基本操作和原理
Git的基本操作和原理
|
6月前
|
开发工具 git
Idea中Terminal中git基本操作
Idea中Terminal中git基本操作
133 0
|
6月前
|
存储 开发工具 git
Git的基本操作和原理
Git的基本操作和原理
44 4
|
6月前
|
存储 开发工具 git
git基本操作(配图超详细讲解)(二)
git基本操作(配图超详细讲解)(二)
43 0
|
6月前
|
算法 安全 开发工具
git基本操作(配图超详细讲解)(一)
git基本操作(配图超详细讲解)
60 0
|
存储 Linux 开发工具
Git:Git的一些基本操作
Git:Git的一些基本操作
|
程序员 开发工具 数据安全/隐私保护
轻松掌握Git开发(五)远程库的基本操作
轻松掌握Git开发(五)远程库的基本操作