【Git】版本控制

mac2022-12-08  55

最近写代码的过程中,因为感觉有的写法不符合项目工程规范,想要给代码瘦瘦身减减肥。但是怕大改动会伤及筋骨,就怕改后跳出什么不知道怎么改出来的BUG。又不能一直回退回退,所以想要给代码来个存档功能,随时随刻能读档。

这时候,Git的版本控制的优势就显而易见 上一次仅仅是将本地仓库和远程仓库联系了起来,没有用到版本控制 Git就是一个分布式版本控制软件,GitHub就是一个Git的托管服务

版本控制的引入

比如你要写代码,在这个项目的基础上(已经有了一个功能A)想要实现一个功能B,你就在原本的文件上增改,突然发现B功能有了,但是A崩了。就很难受,想要时光倒流,拿现在和过去的文件相比做比较。

采取版本控制后,你可以将文件还原到之前的状态,比较各状态之间的细节从而查出是修改了哪个地方,找出哪里出了问题。甚至你可以随意删改项目中的文件,照样可以恢复到之前的样子,因而增加了容错率,提供了更多可能性。

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

Git工作流程

①我们一般在工作区修改增删文件 ②暂存文件,将文件的快照放入暂存区域。对“文件改动”的一种存档 ③提交更新,找到暂存区里的文件,将快照永久性存入Git本地仓库

实践演示

1.改动前

这是一开始我的本地文件夹(请不要吐槽,仅做示范用) 其中那个叫做.git的隐藏文件夹,这个就是git仓库,以后所有的git操作历史提交记录信息就全部记录在此了,只要这个文件夹在就可以记住我们的全部git操作,很贴心呢。

在Github对应的版本号也正是如此,我们叫版本二吧

改动中

现在我有新的操作,着手进行版本三的开发——增加一个1.txt和删除test.html 所以我进行了以下操作

git status

查看修改的内容,红字部分说明了我们做了什么改动——删除了test.html,增加了1.txt 新建的1.txt文件出现在Untracked files下,没有被记录,实际上不属于版本三的部分 删除test.html的改动也没有被保存

git add [文件名]

跟踪文件,添加至暂存区 也可以用 git add . 全部将改动的文件添加至暂存区。此命令会把工作区的所有变化提交到暂存区,包括文件内容修改(modified)以及新文件(new),但不包括被删除的文件。 此时再运行git status,会看到1.txt文件已被跟踪,处于暂存状态(staged),显示Changes to be committed。

接下来提交更新至本地仓库:先用git status命令确定暂存区域准备妥当, 再运行

git commit -m ”提交信息”(提交信息指本次提交的说明,类似于注释)

接下来查看提交历史

git log

在你执行完初始推送后把代码放到GitHub上。

git push

从Github可以看见版本三的提交

你可能会疑惑,为什么test.html还在github上面?这不是我要的版本三 这个问题问得好! 因为我们没有对其进行add,将这个文件的改动提交到暂存状态(staged)区域。 我们再次回到命令行 首先我们查看了状态,发现删除test的改动没有被跟踪提交,一般有红字就要注意啦 之后的操作大家应该看得懂,于是乎变成了版本四?这时候github上面的test.html已经失踪了

3.改动后,版本回退

重点来了,这个版本四不能要了,我想要回来我的版本二! test.html没了,这是一个很重要的文件,怎么办?

这时候就需要时光倒流(版本回退) 在git log命令中我们可以看到一大串黄色像乱码一样的字符,那就是版本号(commit id)我们可以用 git reset命令回退到之前任何一个版本:

借用此篇博客提及的知识点:https://blog.csdn.net/yxlshk/article/details/79944535 重点解释一下这个命令:

git reset

使用git的每次提交,Git都会自动把它们串成一条时间线,这条时间线就是一个分支。如果没有新建分支,那么只有一条时间线,即只有一个分支,在Git里,这个分支叫主分支,即master分支。有一个HEAD指针指向当前分支(只有一个分支的情况下会指向master,而master是指向最新提交)。每个版本都会有自己的版本信息,如特有的版本号、版本名等。如下图,假设只有一个分支:

git reset的作用是修改HEAD的位置,即将HEAD指向的位置改变为之前存在的某个版本,如下图所示,假设我们要回退到版本二,且那个版本之后提交的版本我们都不要了,就可以用这种方法。

使用命令回退到版本二:

git reset --hard [版本号,可以不用写全部,会自动寻找]

版本回退成功了,此时你会惊讶的发现你的本地文件夹恢复到了版本二当初的样子 1.txt消失了,test.html复活了

但是github那边还没有改变,如果你想的话,接下来把这个老版本二推过去 于是你使用git push 报错,因为我们本地库HEAD指向的版本比远程库的要旧 所以我们要用git push -f强制推上去,就可以了

然后Github回到了当初的模样

某种意义上讲,时光倒流了。

最新回复(0)