Git 基本操作(本地库)
很多小伙伴可能都听说过 Git,那么 Git 到底是什么? 为什么那么多人都在使用它?
Git 是一个开源的分布式版本控制系统,用于敏捷、高效地处理任何大中小项目,特别是对于团队协作开发起到了积极有效的推进作用。
通俗地讲,Git 就像我们玩 RPG 游戏时的存档系统,它可以随时保存你的游戏进度。一旦我们失败或者想重温剧情,就可以读取某个存档重新开始。
接下来,我将分为两篇文章分别介绍 Git 本地库管理和远程库操作等内容,相信很快你就会喜欢上 Git!
-
准备
安装 Git,这里是官方下载地址。
远程操作请看【Git - 学会这几个远程命令够你浪上好几年】
创建本地库文件夹,用来保存你的项目文件。然后在库文件夹中鼠标右键选择
Open Git Bash here
,在当前位置运行 Git,自动打开命令行窗口:
你的命令行可能与这里的不同,没关系,因为我们的目录结构本就不同。接下来我们开始使用 Git 命令完成本地库的基本操作。注意,以下操作请在上面窗口中执行(支持 Linux 命令)。
-
操作流程
git init
这个命令应该是你新建项目后要执行的第一条命令,用来初始化你的本地库:
Git 提示,在当前目录下初始化了一个空的 Git 库。从现在开始 Git 开始接管你的本地库,全程跟踪本地库中所有文件的创建、修改和删除等状态。
如果你够仔细,会发现命令行末端多出了一个 .git 文件夹。这个文件夹是由 Git 自动创建的隐藏文件(Linux 中以 "." 开始的都是隐藏文件),保存着版本库相关的文件。
我们来看看这个文件夹:
注意,不要轻易改动或删除 .git 文件夹中的所有文件!
想要了解更多参数,可以查看【init 命令】
git status
这个命令用于查看文件的各种状态。作为演示,我们新建一个 readme.txt 文件,向其中写入一些内容:
我们使用 status 命令查看 Git 对这个新建文件的反应:
Git 在未跟踪文件中列出了 readme.txt 文件,并且以红色标识,很醒目地提示我们该文件尚未跟踪。最后那行提示我们如何把未跟踪文件添加到暂存区。
想要了解更多参数,可以查看【status 命令】
git add
[-A / file name]
这个命令将未跟踪文件添加到暂存区。我们试着添加 readme.txt:
执行命令后,Git 没有任何提示,说明文件添加成功。输入 status 命令查看一下:
Git 状态改变了,readme.txt 文件变成绿色,表示可提交了。同时 Git 还提示我们如何撤回刚才添加的文件。
常用命令参数说明:
-A
- 表示添加本地库中所有未跟踪文件;
file name
- 表示添加指定文件,可以一次性指定多个文件并用空格分开。
想要了解更多参数,可以查看【add 命令】
git commit -m
"message"
这个命令的作用是把暂存区的文件提交到版本库。通过前面的操作,我们已经把 readme.txt 文件添加到了暂存区。接下来,我们把它提交到版本库:
简单解释一下 "message" 参数,它可以是任何内容,建议输入本次提交的简短说明,方便在提交记录中快速定位。
执行结果:
1 file changed
- 表示一个文件状态发生变化(提交了 readme.txt 文件);
1 insertion(+)
- 表示插入了一行内容(readme.txt 中新写入了一行)。
想要了解更多参数,可以查看【commit 命令】
git log
通过上面的一系列操作,我们成功地把一个新建文件提交到了版本库,提交记录也被完整保存下来。现在使用 log 命令查看我们刚才的提交记录:
看到那长长的数字串了吗?其实那是每次提交的 hash 码,一组很大的十六进制数。你可以把它当做一组序列号或者 id,它是唯一的,就是为了区分其它的提交。
HEAD -> master
- 表示 HEAD(版本指针)指向当前提交版本。
想要了解更多参数,可以查看【log 命令】
git diff
接下来我们继续修改 readme.txt 文件,再输入一行新的内容:
文件内容被修改,我们使用 status 命令查看一下:
完美!看到那行红色文字了吗? Git 准确的检测到文件的变化,提醒我们 readme.txt 文件被改动了,但还没有添加到暂存区。Git 还贴心地告诉我们,可以使用 add 命令把修改内容添加到暂存区,或者使用 restore 命令放弃本次修改。
如果不是你本人操作,或者是修改的时间太久了,你可能也忘记文件到底改动了什么。没关系,我们使用 diff 命令与上次提交的内容对比,马上一目了然:
diff 命令不带参数时 Git 默认对比最近的一次提交。从执行结果可以看出,"b" 文件新增了一行内容(带 "+" 号),就是 "Provides both ..." 那行内容。
好的,检查完修改内容,我们再次提交:
提交完成,查看当前状态:
Git 通知我们,整个工作区已经整理干净,无需提交任何文件。这一刻,有没有感觉心里瞬间通畅无比?
想要了解更多参数,可以查看【diff 命令】
git reset
当你看到这个命令时,可能猜到它是做什么的了。是的,它能把当前提交状态恢复到任何一次的状态。换句话说,可以升级或降级到任何版本。
目前为止,readme.txt 文件已经被提交了两次。为了方便演示 reset 命令,现在使用前面学过的命令,对 readme.txt 文件再次修改,形成多次提交记录:
现在我们已经有了三次提交记录:
- 版本一:wrote a readme file
- 版本二:Added the 'Provides both ...' line
- 版本三:Added the 'with an unusually rich ...' line
接下来,我们使用 reset 命令把 readme.txt 文件恢复到第一次提交的时刻:
Git 提醒我们 HEAD 现在指向了 "5356e79"。这串数字从哪来的呢?它就是我们每次提交的 id 号的前七位(还记得吗?那长长得令人恐怖的数字串)。强烈推荐你使用 reflog 命令去查看,除非你有超强的记忆力!
好了,回归正题,赶快去看看我们的劳动成果吧:
很神奇是吧? 文件内容好像不一样了。进入库文件夹打开 readme.txt,里面的内容的确变成第一次提交时的内容。一朝回到了解放前,此时的你一定很忐忑吧。不过大可不必,你完全可以让文件恢复到应该有的样子,这种事情对于 Git 来说简直不要太简单。
既然如此,我们试着把文件恢复到第二次提交时刻:
轻轻松松的, Git 瞬间就把 readme.txt 文件恢复到第二次提交时的状态。怎么样,是不是很享受这种尽在掌握的感觉?
想要了解更多参数,可以查看【reset 命令】
-
小结
上面我们使用了七个命令(reflog 归为 log 命令),熟练运用这些命令足以应对本地基本操作了。现在我们来总结一下这些命令:
-
git int
初始化本地库; -
git status
查看本地库文件的跟踪情况; -
git add
把文件添加到暂存区; -
git commit
把文件提交到版本库; -
git log
、git reflog
查看提交记录; -
git diff
查看指定版本间的差别。 -
git reset
把当前文件恢复到指定版本
其实,大部分命令都可以附带参数,实现更精准地控制。如果想要更进一步了解参数的具体作用,请使用git --help
命令。