十分钟掌握Git

简介: 首先要理清概念Git:什么意思英文直译过来应该是:饭桶,烂人,废物 。由此可猜测当时git的作者可能是谦虚,自喻为“烂人”,认为自己是个自负的混混。当然也可能是因为作者原来用的BitKeeper不让用了,导致作者自己开发了git,他气不过,要骂人BitKeeper。

首先要理清概念

Git:什么意思
英文直译过来应该是:饭桶,烂人,废物 。由此可猜测当时git的作者可能是谦虚,自喻为“烂人”,认为自己是个自负的混混。当然也可能是因为作者原来用的BitKeeper不让用了,导致作者自己开发了git,他气不过,要骂人BitKeeper。

也有人认为,git同音get,是“获得,得到” 的意思,帮助别人获得。
当然也同音gay,同性恋???

也可能是guy in there的缩写,and so on

what ever,管他呢 知乎一群吃饱了的讨论过,你可以看看这里https://www.zhihu.com/question/54939657

名字可以看出,码农多数是很Git(废物?扯淡?艹蛋,吃饱了撑的,无聊……)的,所以说兄弟你这样性格,找不到对象啊!

but,我们码农写代码,想要一个什么样的工具:

让我们来个女神幻想:

  1. 应该是不依赖互联网等,每个人独立开发,互不牵扯,合适的时间(我想什么时间什么时间)互相合并/同步一下对方的代码,合并时记录对方的操作(这样可以在对方做错的时候,骂他and嘲讽他(这样做,好像会使自己感觉牛逼or开心??? 谁知道呢))
  2. 应该方便我定义不同版本的代码,方便发布产品的1,2,3版
  3. 应该方便我定义不同的,处于变化的代码,方便开发,测试,发布等变态需求
  4. 最重要的,工具应该自动化,别让我经常干预,我嫌烦,工具一定要简单,我懒得学!!!
  5. 要标准化,全世界都一样才好。标注化会带来很多意想不到的好处!

Git的作用定义:

分布式文件版本控制系统

  1. 分布式:表示各个节点权力相同,也就是不需要服务器,每个人都能在自己电脑开发,开发者定时互相同步代码就行了。(好像满足幻想1了)
    2.支持标签,随时随地定义你想要的标签。(好像满足幻想2了)
    3.支持分支,分支就是不同的时时会变化的一坨代码。(好像满足幻想3了)
    4.git操作好复杂,还基于命令行的,我喜欢图形界面化的。(不满足,so,git不是女神)
    5.满足

凑合用吧,要什么自行车,还要手表?

基础知识

1.git是 直接记录快照,而非差异

我理解的快照就是文件在特定时间点的拷贝吧,1点的时候文件内容是123,2点的时候变成了1234,那么1点取个快照就是 (文件:1点+123)

2.近乎所有操作都是本地执行

git是分布式的,只有两台不同的计算机互相同步文件的时候,需要网络,其他操作都可以本机进行,只访问本地文件和资源。git本身分为 工作目录+暂存区+仓库,分布式代表了,git在每一台电脑上都是这样,一摸一样。也就是说,你平时的操作都是操作,工作目录+暂存区。源文件改变了,就提交到缓存。只有不同电脑互相同步代码时,另一台电脑的git充当了仓库(服务器)的角色。

  1. git保证完整性

Git 中所有数据在存储前都计算校验和,然后以校验和来引用。 这意味着不可能在 Git 不知情时更改任何文件内容或目录内容。 这个功能建构在 Git 底层,是构成 Git 哲学不可或缺的部分。 若你在传送过程中丢失信息或损坏文件,Git 就能发现。
Git 用以计算校验和的机制叫做 SHA-1 散列(hash,哈希)。 这是一个由 40 个十六进制字符(0-9 和 a-f)组成字符串,基于 Git 中文件的内容或目录结构计算出来。 SHA-1 哈希看起来是这样:24b9da6552252987aa493b52f8696cd6d3b00373
Git 中使用这种哈希值的情况很多,你将经常看到这种哈希值。 实际上,Git 数据库中保存的信息都是以文件内容的哈希值来索引,而不是文件名。

4.git一般只添加数据

为防止丢失数据,最好的方式就是不要提供删除功能。只添加就好了。所以用git,你的代码基本不会丢!

  1. 了解git定义源文件的三种状态

1.已经提交 committed
2.已经修改 modified
3.已经暂存 staged
已提交表示数据已经安全的保存在本地数据库中。 已修改表示修改了文件,但还没保存到数据库中。 已暂存表示对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中。

img_1f39d8213b0c005c004ba5066478de75.png
三种状态

基本的 Git 工作流程如下:

1.在工作目录中修改文件。
2.暂存文件,将文件的快照放入暂存区域。
3.提交更新,找到暂存区域的文件,将快照永久性存储到 Git 仓库目录。

分支

分支的本质是一个指针,指向提交对象的可变指针。https://git-scm.com/book/zh/v2/Git-%E5%88%86%E6%94%AF-%E5%88%86%E6%94%AF%E7%AE%80%E4%BB%8B

命令行

这三个足够了,不懂的,不记得了就--help

$ git help <verb>
$ git <verb> --help
$ man git-<verb>

用不到命令行

假如你用IDEA开发,全鼠标就行了


img_d8f207b93fb9b525f26f8f3075f1ee2c.png

工具栏从左向右依次是:update更新,commit提交,compare比较,history历史,evert撤销


img_ff93d3a819f64faf31aad18182ae93e5.png

右键点击你的项目,可以看到git的所有设置和操作
img_cca3f07dc1ee0ec1880289d910300963.png

右下角有分支等处理


img_077813a7dc8c634eef3d6dbe504ee32d.png

菜单栏有其他任何你想要的版本控制设置

但是,我啰嗦,常用git命令

服务器,或者不同操作系统切换的时候,命令行是最方便的。也看的出作者当时是多么的鸡贼(机制and偷懒and不要脸)

--初始化
git init
--添加文件,让git开始追踪文件的状态
git add * 
例如:
git add *.c
git add test.txt
--提交
git commit -m "备注信息" 
--克隆一个库
git clone https//xxxx 你的地址 修改名称
例子:克隆并重命名 git clone https://github.com/libgit2/libgit2 mylibgit
--检测文件现在的状态
git status
-- 忽略文件
编辑.gitignore文件,把你想忽略的文件/目录 写到里边,支持正则
--查看不同
git diff
--移除文件
git rm 文件
源文件保存,只是移除git控制了
例子:
git rm a.txt
git rm \*
--查看提交历史
git log
--查看远程仓库版本
git remote -v
--从远程仓库拉取或抓取
git fetch 仓库名
--推送到仓库
git push 仓库名 分支
--列出标签
git tag
--不想写了,反正你也记不住,这东西就得用,不用背过也忘了

最后,提升

如果你看完这个文章,发现我说的,你本来就都会,没有收获,恭喜你,又浪费时间了(都会你看什么,是不是吃饱了?)
这时候,你还想深入了解Git应该:
1.看官网文档,最详细,最权威,没有之一 。https://git-scm.com/book/zh/v2/%E8%B5%B7%E6%AD%A5-Git-%E5%9F%BA%E7%A1%80
2.看源码。https://github.com/git/git
3.抱怨:源码有5万多次提交了。。。shit哦

拜拜!

相关文章
|
1月前
|
开发工具 git
【git 实用指南】git 修复错误提交,版本回退
【git 实用指南】git 修复错误提交,版本回退
22 1
|
3月前
|
Shell 开发工具 git
git拉代码
git拉代码
91 0
|
4月前
|
存储 前端开发 持续交付
您有一篇git 原理,请注意查收(一)
您有一篇git 原理,请注意查收(一)
|
4月前
|
存储 开发工具 git
您有一篇git 原理,请注意查收(二)
您有一篇git 原理,请注意查收(二)
|
6月前
|
开发工具 git
开心档之Git分支管理
开心档之Git分支管理
36 0
|
9月前
|
开发工具 git
|
缓存 数据可视化 开发工具
暂存代码 - 每天三分钟玩转Git(四)
暂存代码 - 每天三分钟玩转Git(四)
暂存代码 - 每天三分钟玩转Git(四)
|
开发工具 git
每天三分钟玩转Git(完结)
每天三分钟玩转Git(完结)
每天三分钟玩转Git(完结)
|
小程序 Java Linux
Git是什么?我们为啥需要Git?Git又是怎么生出来的?
Git是什么?我们为啥需要Git?Git又是怎么生出来的?
Git是什么?我们为啥需要Git?Git又是怎么生出来的?
|
开发工具 git
git版本回退【快速上手】
git版本回退【快速上手】
114 0