初识Git

本篇将介绍对Git的初步理解与认识

学习一块新的知识,首先要明白的就是这个知识是什么,能用来干什么。因此接下来将带领你们进入初学者眼中的git。可能因为学的不是很深入会有一些问题,欢迎大家指正。

git是什么

让我们打开菜鸟教程,尝试去解读它对git的说明

菜鸟教程对git的定义
好吧我承认一读到这些都是特有名词的时候我就犯头疼,尝试用自己的语言去解读一下(自己理解的,可能不是很准确,可意会):

下文参考廖雪峰老师的git教程,讲的很清晰明白

假如你在编辑一个Word文档的时候,每次修改保存一个文档,但是可能也会需要没修改之前的文档,于是就分别保存,可能你的电脑桌面就成了这样:
杂乱的Word文档桌面
是不是看起来很凌乱,想要找到某一个版本的文档,还要一个一个打开去查看。而且这份文档的撰写 ,你还需要和同事一起协同工作,此时你将你这份文档copy给了你的同事,但是此时他可能也需要各种修改的版本,所以你将其他版本都给他了。这下好了,不是你一个人凌乱了,还带上同事一起了。

当然人的本质就是懒,因为懒而诞生出了各种技术。相对于上述产生的问题,就开发出了版本控制系统,就是可以记录每个版本的各方面的信息,放在上述的Word例子上就是这样:

Word文档版本信息
这样看起来是不是清晰明白。各种版本一目了然。
现在将Word文档换成一个合作项目需要的代码,大概就能理解一些版本管理系统的意思了。Git就是一个版本管理库

Git的使用心得

介绍完了我所理解的Git,按照剧本应该是安装啊什么的,但是本篇文章并不是一个教程文档,只是个人学习的心得分享,因此跳过了。

理解工作目录和版本库

工作目录
在运行 $git init生成版本库的时候,.git所在的目录就是工作目录了,之后的操作比如文件的修改,提交等就是在这里进行。

那么版本库就是在工作目录的文件最终提交的地方。

文件的添加和提交操作

以一个.txt文件为例,编写完成后,将它移入工作目录下,现在它的状态是这样的:
在这里插入图片描述
文件被打上了一个问号,那么这个问号是什么意思?我们打开git的黑窗口查看git当前的状态

查询状态的命令:$git status

未添加的文件状态
这个Untrack就是告诉我们,这个文件git不认识它,git内心是这样式的:“平白无故在我的工作区里蹦出来一个陌生的家伙,我不把你删了就够温柔了,看到这个问号没,那是我最后的倔强”。

好了回归正题,接下来需要做的就是让Git认识这个陌生的家伙,我们试着 输入指令:$git add test.txt

将文件添加到暂存区的:$git add

添加文件
执行完命令没反应? 其实是有的,可以发现工作目录下的文件已经变成了这样:
添加文件后的状态
?号变成了 + 号,这代表什么意思?
这表示你的文件已经被认可了,但是只是被认可了而已,git并没有 给你添加到版本库里,而是存在了一个叫做暂存区的地方,在这里可以存放你添加后的任何文件,之后通过$git commit -m ""来将暂存区的文件提交到本地库。

提交到本地库:$git commit -m “”

注意-m后面是添加到版本库的这个版本的注释,目测不写会出问题。
提交看一下:
提交到版本库
现在看一下工作目录下的文件状态:
提价后的状态
现在就说明确实提交到了本地仓库。

与远程仓库关联

目前我们使用到的 Git 命令都是在本地执行,如果你想通过 Git 分享你的代码或者与其他开发人员合作。 你就需要将数据放到一台其他开发人员能够连接的服务器上。但是这个服务器并不是真正意义是上的服务器,不需要准备一台24小时开机用于保存数据的服务器,这样万一这台电脑挂了,那就直接凉了。因此Git的好处之一就是远程仓库的托管服务,下面以常用的GitHub作为远程仓库演示。

在GitHub创建一个远程仓库之后在git工作目录下运行黑窗口,输入git remote add origin git@github.com:git账号名/要推送到的远程仓库名.git ,这样就完成了一个远程仓库和本地仓库的关联
之后可以通过git push -u origin master将本地库的内容推送到远程仓库

(之前写的代码没有保存,笔记记得只是教程上的截图,所以下面就放教程的截图吧)

关联远程仓库后的推送
也可以在远程仓库上直接克隆,这样本地就有和远程仓库一模一样的仓库了。实际上在我看来,远程仓库就是每个人都可以访问到的本地仓库。

使用git clone git@github.com:git账户名/远程仓库名.git
可以将远程的指定仓库复制到本地仓库,在哪里运行的黑窗口,就在哪里创建了一个工作目录,以及工作目录下的文件和.git

远程仓库克隆到本地

分支的建立与解决冲突

在版本库里面,有一个master主分支,这个分支就相当于以后做项目时的汇总方案。当每个人负责一块时,不能所有人都对总方案直接修改操作。于是就有了其他的分支,每个人可以通过clone将远程库的master拷贝到自己的工作目录下。实际操作自己的方案时,创建一个自己的分支,在那个分支里面进行操作,不会影响到master。操作完之后可以汇总到master,创建并操作分支可以是两步也可以是一步,具体命令在图上,注意对分支操作时要将指针切换到分支。

分支的指令
这些指令应该不会有什么问题,就不代码一一演示了。问题大概是分支的冲突吧。

如果说创建了一个dev分支之后,在dev分支上操作,之后提交。合并master分支。版本历史就是这样的:
合并无冲突分支
这个时候master分支可以直接合并,不会有什么问题,很完美。

但是如果master分支也被修改了,合并后就是这样:
有冲突的合并1
这个时候如果dev分支上的操作和master上的操作不一致的话,就会产生冲突

这时就需要手动修改冲突,可以在分支上修改,让分支上的内容适应到master上的内容,或者反之,只要让两者修改内容相同即可解决冲突, 在此之前可以通过git status来查看冲突的文件,选择输出这个文件可以查看冲突的内容。

查看冲突内容:

查看冲突内容
Git用<<<<<<<,=======,>>>>>>>标记出不同分支的内容。
找到不同后,根据需求将二者统一后再合并。冲突就这样解决了。

分支与远程仓库的关联和管理

当两个分支之间没有冲突时,可以通过fast forward模式合并,拿master和dev来说,我的理解就是让master的指针直接指向dev。
但是fsat forward有一个弊端,合并了之后是不会有这个分支的时间线的 ,如果这个时候将这个分支删除的话,那么你就丢失了这个分支。
此时可以选择禁用fast forward

$ git merge --no-ff -m “” dev

这个时候查看版本记录的话是这样
禁用了fastf orward
可以发现禁用和不禁用之间的差别,不禁用时这个分支还是存在的,即使将这个分支删除了之后,还是可以找到这个分支的commit记录的。

克隆时,git会自动把远程库的master和本地库的master关联起来 ,就好比关联后的第一次push推送加一个-u关联一样, 两个仓库的分支关联之后,之后就可以直接推送了。

但是克隆的时候只关联了master分支,如果你在本地库创建了其他分支,但是不需要推送这个分支到远程库对应的分支的话,就需要在创建分支的时候就关联到远程库的分支,这个时候远程库的分支也可以访问到 ,在分支上的操作也可以通过推送master一样的方式推送到远程库的分支。

克隆之后的分支
也可以不在创建分支的时候就关联 ,可以自己写分支,之后通过上述命令将分支和远程库上同名(一般建议同名)的分支建立连接,此时就可以推送了, 但是还是建议创建分支的时候就连接远程库。

在这里插入图片描述
多人合作的冲突问题
如果多人在同一分支上工作,工作的时候有人提交了分支,当你再提交的时候就会有问题。
因为你们做的是不同功能的,所以会有冲突 ,此时可以使用pull将远程最新的分支爬取下来,并且和自己的分支合并,这个时候就可以push了。

pull

小结

学无止境,今后会继续学习,分享心得。有不足的地方欢迎指出。

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值