Git:提交文件与 时光机~~

这里要明确一下,所有的版本控制系统其时只能跟踪文本文件的改动。而图片视频这些二进制文件,虽然也能由版本控制系统管理,但没法跟踪文件的变化,只能把二进制文件每次改动串起来,也就是只知道图片从100KB改成了120KB,但到底改了什么,版本控制系统没法知道。

Microsoft的Word格式是二进制格式,因此,版本控制系统也没法跟踪Word文件的改动。

现在写一个file1文件,内容如下:

第一步,git add告诉git把文件添加到仓库:

第二步,git commit把文件提交到仓库,- m后面输入的时本次提交的说明,这样可以再历史记录中更好的找到改动记录。

还可以一次提交很多个文件

下面我们修改一下先前提交的file1为

用git status可以查看仓库当前的状态


我们可以看到git告诉我们file1被修改了,但还没有提交。

git status只能告诉我们file1被修改了,但不能准确的告诉我们具体修改了什么内容,这时可以用git diff命令,git diff 和diff命令相似

这时我们可以看到第二行happy today是我们新加的数据。

先git add file1,再git status看一下状态:

状态中显示file1等待commit.

然后提交:

当前没有需要提交的修改时git会提示我们工作目录是干净的。

那么,如果我们修改提交之后又想要回到前面的某个状态呢?
git log可以由近到远查看我们所有的提交日志:

如图,最近一次提交是10-18-3,最远是first commit。
还可以通过加 – –pretty=oneline看的更加直观:

前面的一大串数字就是commit id(版本号)。
现在,我们试着把file1退回到我们第一次提交时的状态。
首先,我们必须知道,当前的版本表示为HEAD,也就是最新提交的371c5…..bfd,上一个版本就是HEAD^,上上一个就是HEAD^^,往上100个我们可以写成HEAD~100。
git reset 命令可以将当前版本退回到上上一个版本:

这里的– –hard先不用管它的意义,用就可以,以后会提到。

这时,我们就退回到了file1最初的版本,那么,如果想再回到第三个(10-18-3)版本呢?

这时,我们查看一下log:

第二和第三个版本已经看不到了,已经回不去了,怎么办?没关系,如果你的shell还没有关闭,那么就去上面查到第三个版本的commit id就可以还原了:

版本号不必写全,写前几位可以识别就行了。

Git的版本回退速度很快,因为在Git内部有一个指向当前版本的HEAD指针,当你回退版本时,Git仅仅是把HEAD指向了目标版本(10-18-3)

然后顺便把工作区的文件更新了,所以你让HEAD指向哪个版本号,就把当前版本定位在哪。

比如说那个shell关掉了,或者你已经关闭了系统又重新打开想找回那个版本怎么办?这时我们就需要找到那个版本的commit id。Git中的git reflog用来记录你的每一次命令:

查到commit id之后按上面提到的方法就可以回到目标版本了。

-------------本文结束感谢您的阅读-------------