一名苦逼大学生的git学习记录

336 阅读3分钟

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个状态:

git-change.jpg

比如你刚刚创建一个文件,那么他就是Untracked的,通过git add 命令来让他变成 unmodified,是最好的一个状态。修改后,就会变成 modified 状态,再次执行 git add 命令就可以变成 staged 状态,表示一切就绪可以提交了。

git主要命令总结

注:'--'作为分隔符,可以区分optionsfiles等等参数。


  • 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的不同版本将indexworking重置。
    1. git reset [tree] -- <file>index中指定的<file>重置为tree中所指(默认为HEAD)。
    2. git reset [--hard] [commit]index全部reset为commit(默认为HEAD),同时将HEAD指向commit
    • --hard选项同时删除工作区的内容。
    • committree写法: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>删除分支。