首页 > 其他分享 >Learn Git in 30 days——第 04 天:常用的 Git 版本控制指令

Learn Git in 30 days——第 04 天:常用的 Git 版本控制指令

时间:2023-08-18 20:23:40浏览次数:29  
标签:Git 文件 git 04 30 指令 版本 目录

写的非常好的一个Git系列文章,强烈推荐

原文链接:https://github.com/doggy8088/Learn-Git-in-30-days/tree/master/zh-cn

本篇文章将带大家学会几个最重要也最基本的版控工作,其中将包含基本的文件操作如新增、删除、重新命名文件,提交变更 (建立新版本)、查询历史记录等工作。

准备工作目录

复习一下上一篇「第 03 天:建立仓库」的内容,我们直接来建立一个本地仓库,即可开始本篇文章的所有练习。

mkdir git-demo
cd git-demo
git init
 

新增文件

我们在工作目录下放一些文件,至于放什么文件都可以,总之先复制一些现有的文件与目录进到目前的工作目录下。

本篇文章,我将以 YEOMAN 工具,快速产生一个 webapp 范例网站,只要一个指令就可以建立一个完整网站:

yo webapp
 

注: 关于 YEOMAN 在 Windows 平台的使用,可以参考笔者的文章 如何在 Windows 平台安装与使用 Yeoman 1.0 相关工具,该文详述完整的安装与使用过程。

新增了文件之后,如果你还在 Git Shell 介面下,应该会立刻看到如下图的提示:

image

也就是以下这段位于路径后面的提示:

[master +10 ~0 -0 !]
 

在这段提示的地方,你可以看到几个东西:

  • master 代表目前工作目录是 master 分支,也是 Git 的预设分支名称。
  • 「红色」的数字都代表 Untracked (未追踪) 的文件,也就是这些变更都不会进入版本控制。
  • +10 代表有 10 个「新增」的文件
  • ~0 代表有 0 个「修改」的文件
  • -0 代表有 0 个「删除」的文件

如果要要将这些新增的文件加入到 Git 版本控制,你必须下达以下指令:

git add .
 

如此一来,这个工作目录下所有的文件、目录与子目录下的所有文件,全部都会被加入到这个 Git 工作目录的【索引】或【快照】之中。请注意: 此时并没有建立任何版本,只是告知 Git 这些文件「即将」被加入 Git 版本库而已。

如下图示,是我这边执行完 git add . 之后的结果,这里所发生的 warning 消息不是很严重,有兴趣了解的人可以参考笔者的另一篇文章: Git 在 Windows 平台处理断行字元 (CRLF) 的注意事项

image

不过有趣的地方在于,原本「红色的数字」现在却变成了「绿色的数字」,这里所代表的意义是:

  • 「绿色」的数字都代表 Staged (准备好) 的文件,也就是这些变更才会进入版本控制。
  • +23 代表有 23 个「新增」的文件将被建立一个版本
  • ~0 代表有 0 个「修改」的文件将被建立一个版本
  • -0 代表有 0 个「删除」的文件将被建立一个版本

但原本不是只有 +10 (红色) 而已吗? 怎么执行完后变成了 +23 (绿色) 呢?

我们执行 git reset 重设一下工作目录的索引状态,然后再执行一次 git status 查询当前工作目录的详细状态,如下图示:

image

你可以发现,这边列出的只有「第一层目录下的文件与目录」而已,因为 git 不会这个时候去查到底目录下到底有多少文件没有被追踪。

当我们执行 git add . 之后,再执行一次 git status 查询状态,你可以发现连子目录下的文件也都全部被加入了,所以这个数字才会变多,如下图示:

image

新增部分文件

刚刚提到的 git add . 指令会自动将所有文件(含子目录的文件)加入到工作目录索引中,有时候我们只想让特定目录或特定文件加入版本,这时你也可以指定特定目录,或利用万用字元来加入文件。

我们再执行一次 git reset 重设工作目录的索引状态,然后用 git add app 加入 app 这个资料夹与其下的所有文件,还有用 git add .* 新增所有「点」开头的文件,如下图示:

image

image

在执行的过程中,你应该可以发现,在执行 git add 的过程中,Git Shell 提示的文字也有了些变化,现在同时出现了「绿色的数字」与「红色的数字」,所代表的意思跟上述是一样的,是不是非常方便辨识!当你需要知道详情才需要执行 git status 指令。

注: 详细的指令与参数说明,可以输入 git help add 查询完整的文件。

提交变更 / 建立版本

这时我们预计要建立一个新版本了,在建立版本之前,我们还是把所有文件给加入吧,请各位在执行一次 git add . 命令。

建立版本的指令如下:

git commit
git commit -m "版本记录的说明文字"
 

在 Git 版本控制中,所有的版本都必须拥有「版本记录的说明文字」 ( 简称 Log ),不像 Subversion 预设可以签入「没有版本记录说明」的版本。所以当你直接输入 git commit 的话,预设会开启 Notepad (记事本) 让你输入这个版本的消息。开启后的文件会有很多 # 符号开头的文字,这些都是注解,不会成为 Log 的一部分。

如下图示,是我输入的消息文字:

image

当你按下 Ctrl+S 储存这个文字档,这时还不会建立一个新版本,还必须关闭这个 Notepad 视窗,这时才会正式建立版本,如下图示:

image

建立版本完后,Git Shell 的提示就只剩下 [master] 字样了,代表目前已经没有任何要被建立版本的索引或快照。

注: 详细的指令与参数说明,可以输入 git help commit 查询完整的文件。

查询历史记录

由于我们刚刚建立了一个版本,当我们想要查询版本的历史记录,可以输入以下指令:

git log
 

image

有时候记录越来越多,你也可以通过以下指令限制输出的版本数量,你只要通过一个減号 ( - ) 与一个数字,就可以限定输出最近几笔记录:

git log -10
 

注: 详细的指令与参数说明,可以输入 git help log 查询完整的文件。

删除文件

在 Git 指令列工具中也有个 rm 指令,可以用来删除文件。例如我们想删除 Gruntfile.js 这个文件,可以输入以下指令:

git rm 'Gruntfile.js'
 

image

这个 git rm 的指令执行的时候,会同时做两件事:

  1. 删除工作目录快照的 'Gruntfile.js' 这个文件 (用来标示这个删除文件的动作要列入版本控制)
  2. 删除工作目录下的 'Gruntfile.js' 这个实体文件 (代表真的把这个实体文件给删除)

注: 详细的指令与参数说明,可以输入 git help rm 查询完整的文件。

文件更名

在 Git 指令列工具中也有个 mv 指令,可以用来变更文件或目录的名称。例如我们想把 test 目录更名为 unit-test 名称,可以输入以下指令:

git mv test unit-test
 

image

注: 详细的指令与参数说明,可以输入 git help mv 查询完整的文件。

显示工作目录的索引状态

刚刚我们一直会看到 git status 来显示工作目录的状态,你也可以使用 git status -s 来显示较为精简的版本。

image

注: 详细的指令与参数说明,可以输入 git help status 查询完整的文件。

重置目前的工作目录

我们曾经学过如何利用 git reset 重置目前工作目录的索引状态,但请注意,这个指令预设只会重置「索引状态」,那些你用 git rm 删除的目录或文件,还是用 git mv 更名的目录或文件,通过 git reset 都无法把「实体文件」给救回来。

如果想把工作目录也给还原到目前的最新版,则必须输入以下指令:

git reset --hard
 

注: 详细的指令与参数说明,可以输入 git help reset 查询完整的文件。

还原其中一个被改坏的文件

如果文件编辑到一半,发现被改坏了,你希望能救回没修改前的版本,这时你可以利用以下指令还原文件:

git checkout master Gruntfile.js
 

image

这段指令的意思是把 master 分支中最新版的 Grunefile.js 给还原,由于我先前已经把 Gruntfile.js 给删除了,为了要救回这一个档,可以用这个方式救回。这样可以避免使用 git reset --hard 一次把所有文件都给还原了!

请注意,还原的过程也会一并复原工作目录的索引状态喔!

注: 详细的指令与参数说明,可以输入 git help checkout 查询完整的文件。

今日小结

今日的文章,可以说是在 Git 版本控制中不断会重复使用的指令与参数,必须非常熟练才行,接下来的文章,将会详细探讨 Git 版本控制的内部结构,千万不要错过!

我重新整理一下本日学到的 Git 指令与参数:

  • git init
  • git add .
  • git add app/*
  • git add *.txt
  • git status
  • git status -s
  • git commit
  • git commit -m "版本记录的说明文字"
  • git log
  • git log -10
  • git rm '*.txt'
  • git rm 'app/*.html'
  • git mv 'oldname' 'newname'
  • git reset
  • git reset --hard
  • git checkout master 'filename'

标签:Git,文件,git,04,30,指令,版本,目录
From: https://www.cnblogs.com/songzhenhua/p/17641519.html

相关文章

  • [AGC004D] Teleporter 题解
    简单贪心。思路可以发现一号节点必然连向自己。由于题目中保证了最初每个点都可以到达一号节点。那么我们发现改完一后,原图变成了一棵十分优美的树。考虑在树上进行贪心。我们贪心的从叶子结点往上走。知道第\(k\)个若还没要到\(1\),就直接连向一号节点。这个贪心也比较......
  • 20230818比赛
    T1休息(rest)Description休息的时候,可以放松放松浑身的肌肉,打扫打扫卫生,感觉很舒服。在某一天,某LMZ开始整理他那书架。已知他的书有n本,从左到右按顺序排列。他想把书从矮到高排好序,而每一本书都有一个独一无二的高度Hi。他排序的方法是:每一次将所有的书划分为尽量少的连续部......
  • QOJ # 6504. Flower's Land 2
    题面传送门感觉,非常高妙的随机化!考虑怎么判定一个序列合法,将每种颜色的奇数位置看成左括号,偶数位置看成右括号,则一个序列合法当且仅当其括号序列合法。现在带修,我们维护的东西需要满足如下性质:可逆:将相邻奇数位的信息和偶数位的信息合并需要等于单位元。有结合律:不然没有办......
  • iwebsec-sql注入 04 时间延迟型注入
    01、题目分析:三大盲注中的时间型注入,当查询语句正常的时候,不会有什么返回值或者回显,唯一的特征就是可以通过sleep函数来判断sql语句是否正确,也就是说,当有办法能判断输入语句是否正确的时候,步骤就和bool盲注一样了,话不多说,直接先让我们伟大的sqlmap跑起来02、sqlmap工具注入:一......
  • Gitflow分支管理模型
    1前言Gitflow是一个Git分支管理模型,由VincentDriessen于2010年发布在其个人网站的一篇博文中《AsuccessfulGitbranchingmodel》,该模型适用于多版本管理的项目,能够有效的促进团队成员之间的协作,提升代码的清晰度。2概览Gitflow工作流程如下:如上图,Gitflow流程中......
  • git merge规则
    参考文档:https://juejin.cn/post/7129333439299321887丹尼尔:Hi,蛋兄,周杰伦都出新专辑了,你咋还不更新啊,真的打算半年一更啊?蛋先生:好像确实是这样,要不,择日不如撞日,今天聊聊?丹尼尔:好啊,那聊些啥呢?蛋先生:最近搞的事情需要实现两个应用项目的代码合并,逻辑就完全参照gitmerge的基本......
  • git commit 前置规范名称
    git提交代码对应规范如下:feat(新功能):新增代码文件:新功能相关的代码文件、模块等。更新测试文件:添加新功能的测试用例。fix(修复):修改代码文件:包含有问题代码的文件。更新测试文件:修复问题的测试用例。docs(文档):Markdown文件:更新项目文档、README、帮助文件等。注释:......
  • JavaSE学习笔记day04
    IO流概念:OS的文件系统:(1)文件:文本文件、视频文件、音频文件、图像文件、可执行文件等等,这些文件都是由一个个字节组成的。(2)目录(文件夹):对文件进行归纳划分,将同类型的文件方法在同一个文件夹中,方便我们管理和使用。(3)资源访问路径:1)相对路径:相对于某一个文件夹......
  • iBooker 布客技术评论 20230818
    一、程序员自检手册为了避免焦虑,你首先需要做的就是梳理你的业务:(1)你所在的行业是轻资产还是重资产?重资产就是人绕着机器转,创业需要买一大堆设备。如果是重资产,赶紧换一个。(2)你在行业中的位置,离最终用户有多远?如果中间有一堆中间商赚差价,要么干掉,要么走人。(3)你目前的技能能够......
  • ubuntu 18.04 git2.17.1升级 2.41
    默认安装版本一、添加git官方源sudoadd-apt-repositoryppa:git-core/ppa根据提示回车继续二、更新仓库包索引sudoaptupdate不更新,即便git官方有更新,你也搜索不到三、查看有什么软件可以更新aptlist--upgradable可以看到左边红箭头,显示是最新的git2.......