git clone、git fetch 与git pull的区别

git clone、git fetch 与git pull的区别

1. 前提

理解Git是一个分布式版本管理系统;

了解objects、.git/refs/和.git/logs/目录的作用。

objects存放的是文件的具体变化细节;

.git/refs/存放本地和远程分支、标签对应的提交哈希值(可以看做版本号);

.git/logs/存放的是.git/refs/的变更记录;

2. git clone

git clone repo_url [dir]    # 顾名思义,就是将远程仓库克隆到本地。

3. 重点分析git fetch 与git pull的区别

(1)操作效果:git pull = git fetch + git merge

由于Git是一个分布式版本管理系统,那么本地仓库与远程仓库应该保持一致;但是由于仓库多个分支多人协作开发,这时候就会导致多个本地仓库不一致,如何让多个本地仓库及远程仓库保持最终一致呢?

这就离不开git push和git fetch与git pull命令了。

假如三人同时开发一个项目,小明、小亮、小红。

小明自己的模块开发完毕,git  push 到远程仓库master分支即可;

小亮开发完成之后,也需要git push,但是这时候远程仓库已经发生变化,因此,需要先将远程仓库与本地仓库保持一致,这就是git fetch的作用,将远程仓库最新的commit版本同步到本地仓库,同时在.git/refs/remotes/目录下记录远程仓库最新的提交哈希值;接下来,小亮需要将自己开发的内容与小明的合并在一起,也就是git merge命令,merge之后再add、commit、push到远程仓库即可。

小红需要提交自己的内容时,操作应该和小亮一样。

小红在执行完git fetch命令后,并没有直观的观察到什么变化,感觉完全可以将git fetch与git merget合在一起,于是就有了git pull。git pull直接将代码拉取到本地工作区,小红可以直观地看到文件内容的变化,很开心。

(2)本质区别

相同点:都将远程仓库新的提交同步到本地仓库;

不同点:git fetch 更新的是.git/refs/remotes/下即关联的远程仓库对应分支的最新提交哈希值(版本号);

而git pull 更新的是.git/refs/heads/下即本地仓库对应分支的最新提交哈希值(版本号),并多了git merge操作。

 

参考博客:https://blog.csdn.net/a19881029/article/details/42245955

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值