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>
删除分支。