git菜鸟踩坑记

最近刚使用git,欲仙欲死、晕头转向,赶紧把一些学习过程记录下来,以作备忘,并和大家共勉之。本文只是探究原理,其他精彩的细节可以参考文后相关连接。
要弄懂git先要弄懂几个概念:工作区、暂存区、本地仓库、远程仓库。
1)工作区
工作区就是你的编辑修改区,也就相当于你打开word文件,然后你就可以随便修改内容了。
2)暂存区
于你修改完后总要把文件保存起来吧?暂存区就相当于windows的文件系统,用于存储工作区中添加上来的变更(新增、修改、删除)的文件。操作时,使用git add .会将本地所有新增、变更、删除过的文件的情况存入暂存区中。如果使用ui工具,比如git小乌龟之类,如果是新建文件,那么需要执行add,如果是修改已有文件,那么就不需要add,只需要save即可,这个原理和svn是一样的。
3)本地仓库
用于存储暂存区提交上来的变更(新增、修改、删除)过的文件的地方。操作时,使用git commit –m “本次操作描述” 可以将添加到暂存区的修改的文件提交到本地仓库中。
这里就是git中最核心的概念:既然暂存区已经保存了变更(新增、修改、删除),工作区和暂存区其实已经完成了windows中的文件编辑和文件保存的功能,本地仓库还有必要再保存一遍?本地仓库有什么存在的必要?
答案就是:为了版本管理。
工作区和暂存区保存后的文件就是你最新的代码,并不具有版本管理功能,什么意思呢?也就是说你今天save了一个文件,那么你的原来所有的旧的修改记录信息就被彻底删除、不复存在了,你就不可能再打开文件看到昨天或者更早的老代码不是?可是版本管理就不一样了,你要提供不同阶段的新老文件同时给不同需求的人使用,也就是说,你除了维护最新的这个文件,还必须要保存上一个甚至更老的几个开发文件,这就是版本管理。没有Git之前,开发者怎么完成这个需求?必须手动把各个阶段的成果编号,客户需要哪个文件就提供那个编号的文件,这种繁复的维护簿记工作不但耗费了大量的时间和精力,而且容易出错。Git就是替开发者来自动完成这种簿记工作的,具体的实现就是本地仓库。
本地仓库之所以叫仓库,正是因为其中存放的是你所有的修改过的记录信息,你可以查看或者回退以前的代码。如果查看本地仓库的话,你就会发现里面不但有你最新的代码,还有所有你保存过的所有历史记录。
4)远程仓库
就是网络上的公共服务器,这里是你和其他人共享代码的地方,你的代码放在这里才能被其他人看到。
本地仓库还只是你自己能查看的记录,远程仓库可就是你正式发布出去给别人看的。
工作区、暂存区、本地仓库、远程仓库的关系:
在这里插入图片描述
从上图可以看到,我们如果想将在本地工作区中修改,推送到远程仓库的话,需要将工作区的修改的内容,添加到暂存区,再将暂存区的内容提交到本地仓库,最终将本地仓库的内容推送至远程仓库,才能达到最终想要将本地修改推送到远程仓库的目的。

几个常用命令:
拉取代码:pull
命令:git pull origin分支名称

如果我们需要将master主干分支的代码拉取并与我们当前工作区的代码进行合并的话,可以使用该命令。
相当于指定分支的代码与当前分支的代码合并到了一起。

注意:
Pull不能合并处于编辑状态的代码,所以每次使用该命令前,需要保证本地工作区是没有任何代码处于正在编辑状态的。
这段话怎么理解呢?
这就相当于你正在用word编辑一个a.doc,那么这个a.doc就处于编辑状态,你当然就不能用其他工具对它进行再编辑了吧,一个文件不能被两个工具同时编辑的。这应该是常识。

那么你会怎么办呢?当然是save命令把缓冲区中的文件保存到文件,然后才能使用其他工具对文档进行操作不是?

Git中的save相应概念就是说需要将本地工作区正在编辑修改的文件添加到暂存区(git add 添加新建文件),或提交到本地仓库中(git commit,源文件基础上的修改代码)。执行(git add .)或者git commit),你的所有正在编辑的代码就被缓存到其他地方,本地工作区的所有代码包括你的修改代码就处于非编辑状态,也就是没有被其他的应用所占用,这时才可以使用Pull命令拉取指定分支的代码合并到当前分支中。

每次在操作完git commit命令后,必须pull拉取一下master分支代码,这时候git会自动合并我们本地工作区的代码(包括我们修改过的新增代码)和服务器的新代码,这样一来,我们本地服务区的代码就是服务器的最新代码和我们自己修改的新代码的合集。这样就可以保证本地正在开发功能逻辑的代码分支代码是最新的,避免后续在提交时冲突过多或覆盖掉其他人的代码的问题出现。
执行pull拉取结果有三种:
a)服务器没有其他新代码,无需更新。
执行命令后,可以看到提示Alreadyup-to-date,意思为:已经是最新的了,无需进行更新。
b)服务器有其他新代码,而且服务器代码和本地代码顺利自动合并。
当我们拉取的主干分支master被修改后,再执行拉取命令,会看到如图所示效果:
(本处图片省略)
粉色框框选部分为自动合并代码的文件

绿色框框选部分为本次更新(包含新增、删除、修改)的文件及具体信息,文件名后面的9 表示有9行有更新, +++++++++表示这些更新是新增(+)还是删除(-)。

红色框框选部分为本次更新影响的文件数,新增的行数(insertions),删除的行数(deletions)。

3)服务器有其他新代码,并且和本地代码有冲突
冲突,简单的说,同一个文件2个人编辑,2个人如果编辑的行数没有重合的话(一个人写1-10行,另一个人写11-20行),合并时就没有冲突,git会把不同的行自动合并成一个新文件;若2个人编辑的行数有重合的话(一个人写1-10行,另一个人写5-15行),合并时就会出现冲突,同时,会将2个人编写的内容都罗列出来,让出现冲突的那个人进行解决,最终将冲突解决完毕后,再进行提交合并等操作。

发生冲突的原因大致可以理解为你与你的同事两个人在同一个文件中都进行了编辑操作,当其中一个人拉取合并了另一个人的分支,或拉取合并了另一个人合并过的分支的话,就会出现合并冲突的问题。
解决冲突后的方法网上一搜一大堆,这里不再赘述。
上传代码:push
上传代码前,一定要先执行pull进行拉取合并服务器最新代码,
先add(如果是新文件),再commit -----》push

参考文章:
Git三大特色之Stage(暂存区):
https://blog.csdn.net/qq_32452623/article/details/78417609?depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-7&utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-7
Git使用手册/Git教程:
https://blog.csdn.net/u013374164/article/details/78831438

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值