Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情。
git的基本使用方法和内部结构
如果你作为一名在职程序员还不知道git,我建议你问一问你的老板:“咱们的项目还有救吗?“
当然作为一名大学生,不知道git也是很正常的,不过不重视git 的使用那可就危险了。
git是什么?
首先我们有一个需求,那就是版本控制。
想象一个场景...
你写了一篇毕业论文,命名为小阳-毕设.docx。
一天后,你发现有了一个更好的点子,需要改一下论文,但是又不敢轻易的抛弃原来的论文,于是你的文件夹中有了:小阳-毕设.docx和小阳-毕设-改进版.docx。
以此类推,小阳疯狂迭代自己的论文,让他的文件夹里充满了知识:
小阳-毕设.docx
小阳-毕设-改进版.docx
...
小阳-毕设-最最最终极版.docx
要是代码也想上面这样一个版本一个不同名字的文件,对于大项目来说将会是毁灭性的打击,如果大家进入了这样的公司还是速速删库跑路吧~~~
而这就诞生了版本控制的需求:可以自动在代码的不同版本之间进行转换和一系列操作。
而git绝对是全世界最好的源代码版本控制系统了,没有之一!!
git的基本操作网上有很多,各位可以去找。这里我结合最近学习的内容总结一下git的高阶知识。
git的目录结构
在git环境下,可以分为四大区:
- git的工作区:指用户编辑文件的地方。
- git的对象库:.git/objects,存放经过压缩的所有需要版本控制的文件。
- git的暂存区:.git/index,是一个索引树。
- git的仓库(一个分支)。
git的所有历史文件其实都存在对象库中,所谓的暂存区和仓库,实际上都是一个记录了索引的地方。
git文件状态
git的工作区中,可以分为文件的4个状态:
比如你刚刚创建一个文件,那么他就是Untracked的,通过git add 命令来让他变成 unmodified,是最好的一个状态。修改后,就会变成 modified 状态,再次执行 git add 命令就可以变成 staged 状态,表示一切就绪可以提交了。
git主要命令总结
注:'
--'作为分隔符,可以区分options和files等等参数。
checkout:结账,指目前的事干完了,因此对工作区进行清算。git checkout [tree] -- <file>:使用tree(默认为index)覆盖工作区的file。git checkout <newbranch>:将工作区设置在newbranch工作。(原branch的文件删除,现branch的文件添加,没有被add的文件不会变化)
注:- 原分支需要
commit后才能生效。
- 原分支需要
rm:同add的逆操作,删除index的文件或者index+working的文件。git rm <file>删除index+working的<file>。git rm --cached <file>操作只删除index的<file>。- 同Linux自带的
rm指令,删除非空文件夹时也需要-r参数。
reset:使用branch的不同版本将index或working重置。git reset [tree] -- <file>将index中指定的<file>重置为tree中所指(默认为HEAD)。git reset [--hard] [commit]将index全部reset为commit(默认为HEAD),同时将HEAD指向commit。
--hard选项同时删除工作区的内容。commit或tree写法:HEAD~,HEAD~~,HEAD~50...- 同样不会改动
Untracked的文件。
clean: 对Untracked的文件进行清理。git clean -f [...] [--] <paths>删除paths目录中Untracked的文件,未指定则删所有。
branch: 分支相关操作。git branch <new branch>创建新的分支。git branch [-a]显示现有分支(-a显示所有分支)。git branch -d(D) <branch>删除分支。