安装 git

本笔记依据廖雪峰的官方网站进行学习编写,感谢大佬的教程分享

官网下载之后一路默认安装,安装完成后,右键打开 git bash here,输入

$ git config --global user.name "Your Name"
$ git config --global user.email "[email protected]"

作用是设置提交者的姓名和联系方式,这样当你提交的代码有问题的时候其他协同工作者就可以看到提交者是谁并且可以通过邮箱直接联系

--global参数的作用是表示这台机器上所有的 git 仓库都会使用这个配置,当然也可以对某个仓库指定不同的用户名和 Email 地址。

创建版本库

自己选择一个目录,然后右键点击 git bash
here,输入

mkdir gittest

创建一个文件夹作为版本库存放目录(注意文件夹名不要用中文),然后输入

cd gittest

使工作目录切换到该文件夹下,然后输入pwd查看当前的工作路径,它就会显示当前工作目录的完整路径,就像这样

Git 学习第一天

我是直接在 D 盘根目录下创建了一个 gittest 文件夹。

输入

git init

把这个目录变成 git 可以管理的仓库,然后会提示你已经创建了一个空的仓库,并且默认会处于 master 分支下。

Git 学习第一天

这时候在资源管理器中就有了一个 .git 文件夹。不过这个文件夹是隐藏的,如果看不到只需要点击菜单栏的查看 - 将 隐藏的项目 勾选上即可。

Git 学习第一天

把文件添加到版本库

首先说明一下,所有的版本控制系统,只能跟踪文本文件内部的改动,比如 .txt 文件,.html 文件,代码源文件等等,会给出类似在第5行加了一个单词“Linux”,在第8行删了一个单词“Windows”等提示信息。而图片、视频、音乐这些二进制文件,版本控制系统只能管理,不能跟踪文件内部代码的变化,也就是只知道图片从100KB改成了120KB,但到底改了啥,版本控制系统不知道

不幸的是,office 的 word 也是二进制格式文件

另外

不要使用Windows自带的记事本编辑任何文本文件。原因是Microsoft开发记事本的团队在每个 UTF-8 编码的文件开头都添加了 0xefbbbf(十六进制)的字符,所以会导致很多不可思议的问题,比如网页第一行可能会显示一个“?”,明明正确的程序一编译就报语法错误等等。又或者会出现这样的错误
Git 学习第一天
出现这个错误的原因就是由于文件编码不一致导致 windows 的回车键格式与 git 不一样导致出错

建议下载 Notepad++ 代替记事本,功能强大且免费。然后将 Notepad++ 的默认编码设置为 UTF-8 without BOM 即可

在 gittest 目录下右键新建一个 readme.txt

右键 readme.txt 然后点击 Edit with Notepad++ 即用 notepad++ 编辑此文件,然后在菜单栏 - 编码 - 点击 UTF-8 即可
Git 学习第一天

然后在里面输入两行话

Git is a version control system.
Git is free software.

然后在 git 命令行窗口里执行

git add readme.txt

把文件添加到仓库,执行完后,没有任何显示就对了,然后执行

git commit -m "wrote a readme file"

把文件提交到仓库,-m后面输入的是描述信息,一般为对本次提交内容的说明,这样就能从历史记录里方便地找到改动记录。

执行成功就会有下面的提示信息

Git 学习第一天

1 file changed:1 个文件被改动(我们新添加的readme.txt文件);
2 insertions:插入了 2 行内容(readme.txt有 2 行内容)

为什么Git添加文件需要add,commit一共两步呢?

因为commit可以一次提交很多文件,所以你可以多次add不同的文件,比如:

git add file1.txt
git add file2.txt file3.txt
git commit -m "add 3 files."

版本回退

首先,把刚创建的 readme.txt 文件内容进行修改(记得不要双击用记事本编辑,用 notepad++ 编辑)

Git is a distributed version control system.
Git is free software distributed under the GPL.

然后进行提交,

git add readme.txt
git commit -m "append GPL"

接下来就是时空穿梭时刻

每当我们觉得文件修改到一定程度的时候,就可以“保存一个快照”,这个快照在 Git 中被称为 commit。如果某天我们把文件改乱了,或者误删了文件,还可以从最近的一个 commit 恢复,然后继续工作,而不是把几个月的工作成果全部丢失。

执行

git log

可以显示日期从近到远的提交日志,所以我们可以看到 2 次提交,第一次是创建的时候,第二次是刚刚修改的时候

Git 学习第一天

根据当时留下的描述信息,我们可以清楚的知道我们都做了什么修改,而且可以知道提交者的名字和练习方式。

这样的显示虽然清楚但似乎有些太占屏幕了不是吗,所以我们可以加上--pretty=oneline参数显示简略信息

Git 学习第一天

那一大串十六进制字符是 commit id (版本号),和 SVN 不同的是,git 的 commit id 不是 1、2、3 这样递增的数字,而是一个 SHA1 计算出来的一个非常大的数字

为什么commit id需要用这么一大串数字表示呢?

因为Git是分布式的版本控制系统,如果多人在同一个版本库里工作,而大家都用1,2,3……作为版本号,就肯定会引发版本冲突了

现在我们坐时光穿梭机回到过去

首先,Git 必须知道当前版本是哪个版本,在 Git 中,用HEAD表示当前版本,也就是最新的提交版本,上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上 100 个版本写 100个^ 比较容易数不过来,所以写成HEAD~100

然后,执行命令回退到上一版本

git reset --hard HEAD^

Git 学习第一天

然后打开 readme.txt 查看里面的内容是不是恢复到之前我们刚创建时候输入的内容,如果是,恭喜成功。如果不是,那是不可能的,欢迎在评论区留言

然后我们再用 git log 查看一下现在版本库的状态

Git 学习第一天

凉凉,已经看不到之前那个最新的版本了

现在再回去的话就需要通过之前的版本号了,可以通过往前翻历史输入记录找到之前最新版本的版本号(如果你有每执行一行就随手关闭窗口的习惯,那恭喜你彻底凉凉哈哈哈哈容我开心一会)。

如果窗口被关掉了怎么查看 commit id 呢

请执行 git reflog
Git 学习第一天
这样就可以看到命令历史,然后就可以根据提供的 7 位版本号直接回退到之前的版本了

我之前最新的版本号是 6b6710fd……,所以执行

git reset --hard 6b6710fd

版本号只输入前几位即可,Git 会自动去找。当然也不能只写前一两位,这样模糊搜索就可能会找到多个版本号就无法确定要回退的是哪一个了

这时候打开 readme.txt 文件查看一下内容是不是又变回去了,如果没变,不可能的

Git 的版本回退速度非常快,因为 Git 在内部有个指向当前版本的 HEAD 箭头(指针),回退版本的时候,Git 仅仅是把 HEAD 重新指向为想回退到的那个版本

相关文章: