四,pull和fetch的区别在哪里
虽然用git的时间不长,但是我更喜欢深入去理解每个命令背后都做什么了,这样才能知道哪个命令适合什么样的场景
大神的总结: pull = fetch + merge
怎么理解这个总结呢,我还是决定去深入学习一下,大家随我一起来吧!
基础知识
git的工作原理还是需要一些的,小白同学可以参考 here
首先,介绍下git repository的结构,其实就是一系列的文件和文件夹~~~~
我们今天要关注的是refs这个文件夹,打开这个文件夹我们会看到如下的结构:
./refs/heads/master
./refs/remotes/origin/master
refs/heads/master是一个文件,它保存的是我们本地分支master的最新的commit id
refs/remotes/origin/master也是一个文件,它保存的是远程库中master分支的最新的commit id (这里说最新不是很准确的,应该说是上次你执行pull或fetch时,当时远程库master分支的最新commit id)
fetch到底干了什么
在使用fetch前,我们先看看当前的状态是什么样子:
refs/heads/master的值是 46dc044b237805d417a2fa7171a5c42dab064858
refs/remotes/origin/master的值是 46dc044b237805d417a2fa7171a5c42dab064858
看一下branch的情况:
$ git branch -a
* master
remotes/origin/HEAD -> origin/master
remotes/origin/master
在远程库中,我们新建一个dev分支,并在master分支下添加一个文件,下面我运行fetch,然后
refs/heads/master的值是 46dc044b237805d417a2fa7171a5c42dab064858 没有变化
refs/remotes/origin/master的值是 c83043f653e8e1495b4356ff735d1c6fd0d90c83 已经变了
branch的情况:
$ git branch -a
* master
remotes/origin/HEAD -> origin/master
remotes/origin/dev 我们看到远程新添加的分支了
remotes/origin/master
可见,fetch将refs/remotes/origin/master的内容更新成了远程库中最新的commit id,还将远程库中的分支信息更新到了本地。其实,fetch也将上次pull或fetch之后所有的远程仓库的提交都下载到本地仓库了,只是没有将其与master分支进行合并(最后这句话不是很好理解,我们知道git的分支只是指向了一个commit列表中的最新的commit,其他commit可以单独存在于仓库中,即使他不属于这个commit列表。 如果想将这些commit加入master的commit列表,这就是一个merge操作了)
TBC
YJ_2640693256: 是的,用大括号解构出对象中的某一个属性 obj.name相当于{name}
weixin_57402214: mysql有点特殊,从group by开始就可以跟别名; oracle的话,从distinct开始跟别名
提桶跑: 进入不了容器
倚恋: 感谢,真的有用耶,真我Q3手机的解决方案跟OPPO的一样
这样不好吧!: group by 子语句之后就可以使用别名了,你这个确定having不能使用别名?