Git 是一款分布式版本控制系统,主要用于高效管理代码版本和团队协作开发。它能精确记录每次代码修改,支持版本回溯和分支管理,让开发者可以并行工作而互不干扰。通过本地提交和远程仓库同步,Git 既保障了代码安全,又实现了多人协作开发,同时支持离线工作,是现代软件开发中不可或缺的工具。
比如下面的场景:在学校中,你的老师要求你写一个的文档。你奋笔疾书地写下了第一版并且交给了老师,但老师不满意,认为还有改进的地方,于是你在这个第一版的word文件上直接进行覆盖式的修改,得到的第二版交给了老师,老师仍然觉得不满意,于是第三版,第四版......当你把最终版交给老师之后,老师来一句“我觉得还不如你的第一版,就要第一版吧!”。这时你崩溃了,因为你修改的时候是直接在原来版本的基础上直接进行修改的,根本没有保存以前的版本,拿不出来第一版。
这种情况就会让人很难受,因为你基本没有办法恢复出第一版,所以就有了Git,来记录每次的修改及版本迭代的一个管理系统。
1、认识工作区、暂存区、版本库
比如我们在当前目录下创建一个ReadMe文件。
当前目录下的.git就是版本库,或者说真正的仓库,ReadMe所在的位置就是工作区。
图示为:
暂存区也被称为索引,是版本库的一部分。目前情况下,Git能否管理ReadMe文件?
答案是不能的。
在建立的仓库的工作区中进行一次add,文件的修改信息(包括新增,修改,删除)就会在保存在stage的暂存区中,再对该文件进行commit操作就会将文件信息提交到master分支,也就是本地仓库,对应的还有个概念是远程仓库,远程仓库就是我们在Gitee中创建的仓库,可以克隆到本地仓库。
修改的工作区内容会写入对象库的一个新的git对象中。
2、添加文件
可一次提交一个文件,多个文件或所有文件。
git add ReadMe
git commit -m "描述"
git add file1 file2
git commit -m "描述"
git add .
git commit -m "描述"
一个文件:
多个文件:
查看git日志命令:
git log
git log --pretty=oneline
上面的两个都可以,第二个显示的更加简洁:
3、修改文件
git追踪管理的其实是修改,而不是文件。
使用git diff查看暂存区和工作区的差异,例如:在ReadMe中添加了hello git,使用git status就能查看到当前被修改的文件:
使用git diff 文件名:
git diff 文件名
该命令用来显示暂存区和工作区文件的区别:
最下面的绿色字体就是新增的内容。这样就能看到做了什么修改,可以大致检查一下再提交,就会放心很多。
4、版本回退
git reset [--soft | --mixed | --hard] [HEAD]
使用git reset进行版本回退,要注意的是主要有三个地方的可能回退,工作区、暂存区、版本库;工作区的内容修改后进行add才会保存到暂存区,经过commit后才会保存到版本库。
--soft 只会回退版本库的内容;
--mixed 会回退版本库和暂存区的内容;也是git的默认选项;
--hard 会回退所有的内容,这个要慎用,因为工作区的也被回退,可能你写了很多代码,没有保存时使用了这个,那么所有的内容都会被回退,这样就会导致你所写的代码全部不在了。
HEAD选项表示回退到当前版本库的版本,也就是回退到当前版本。
git reflog
这个命令可以查看变更历史,找到对应版本的对象ID,通过该ID可以回退到指定的版本,是 Git 本地数据恢复的关键工具。
5、撤销修改
版本库中的代码经过git push 可以推送到远程仓库;远程仓库的代码才是自己真正用的,所以要保证远程仓库的代码正确性,就有了撤销操作:目的就是不影响远程仓库的代码。
6、删除文件
删除后再add和commit,也就是现在工作区中删除,再在暂存区中删除,最后在版本库中删除。
这两个命令可以合并成一个命令,git rm [filename]
git rm [filename]
这个命令帮我们同时做了两件事,首先在工作区中删除,其次在暂存区中删除,所以我们为了方便,一般会用这个命令进行删除。