前言
- 远程仓库上只有 1 个 master 分支。
![在这里插入图片描述](https://img-blog.csdnimg.cn/441ec2ba48e84ebba5e93d9ad3759f7f.png)
- 复制远程仓库的地址。
![在这里插入图片描述](https://img-blog.csdnimg.cn/4cdd3bcd33b348378c96b61558d8048b.png)
3. 克隆远程仓库到本地。
![在这里插入图片描述](https://img-blog.csdnimg.cn/41a63d440d9244ac9305d3279485b372.png)
一、
- 注意:本地的 head 和 master 文件都存在,但是 remote 的 master 信息是保存在文件
.git/packed-refs
中。
![在这里插入图片描述](https://img-blog.csdnimg.cn/8065a5ed2e274a3c819178a5b5c50e8c.png)
- 可以看到,当前 HEAD 指针指向本地仓库的 master 分支。同时远程仓库的 mater 分支的最新 commit 和本地仓库 master 分支的 commit 一样。
- 但是注意:origin/master, origin/HEAD 指向的 commit ,只是我们执行
git clone
那一刻,远程仓库上 master 分支指向的 commit。本地仓库保存的origin/master, origin/HEAD 可能已经和远程仓库的 master 分支 commit 不一样了。
![在这里插入图片描述](https://img-blog.csdnimg.cn/802e0164800048bdb2a03c940c7b0aa2.png)
- git-fetch - Download objects and refs from another repository.
- fetch 命令用于 从本地仓库保存的远程分支 origin/master ,更新远程仓库的最新 commit 信息到本地,或者更新远程仓库的其他分支信息(如新创建的 dev 分支)到本地。
![在这里插入图片描述](https://img-blog.csdnimg.cn/bc54e6099bd24c258f77c1c579e98166.png)
- 实际上,
git branch
和 git remote
命令显示的都是保存在了本地仓库的信息,并不是实时从远程仓库获取最新信息。
![List item](https://img-blog.csdnimg.cn/4a4ddf6994974dd389f86680b3e0b283.png)
- 那么我们必须知道远程仓库的最新信息,才能决定是否需要执行
git fetch
从远程仓库拉取:最新的 commit 提交,或者最新的 dev 分支信息。 git remote show origin
命令通过连接网络
,去获取本地分支与远程分支的关联情况。
![在这里插入图片描述](https://img-blog.csdnimg.cn/0c508aee8f7842a89ffb3eb492bef580.png)
二、演示远程仓库的更新
1. 远程仓库执行了新的 commit
- 当前本地仓库保存的远程分支 master 和本地分支的 master 是相同的。
![在这里插入图片描述](https://img-blog.csdnimg.cn/2f0dbccfa1e9479fb3a09503224f1b88.png)
![在这里插入图片描述](https://img-blog.csdnimg.cn/f0cc61a0bf5f4211ad7eaf6e3d26829d.png)
![在这里插入图片描述](https://img-blog.csdnimg.cn/3d11f2a665704d268f97416cefbfa206.png)
![在这里插入图片描述](https://img-blog.csdnimg.cn/afe4e3906f814955b55d6e338c86f336.png)
- 远程分支上提交了新的 commit,但是本地分支保存的 remote/origin 信息并不会主动更新。
![在这里插入图片描述](https://img-blog.csdnimg.cn/1f819877adf8429fb4ee137bdc1cc4c9.png)
- 执行 fetch 从远程分支拉取最新信息到本地分支。
- fetch 拉取的信息主要是:1).git/objects/ 目录下远程分支的 git obj 对象;2).git/refs/ 目录下远程分支的 origin 目录文件。
![在这里插入图片描述](https://img-blog.csdnimg.cn/12f35da528ea414bb50613b5b27da464.png)
- 注意:packed-refs 是在
git clone
时将压缩信息保存在其中的,只是 clone 时刻远程分支上的信息。 - fetch 之后,.git/refs/remotes/origin/master 才是实时反映远程分支的信息。
![在这里插入图片描述](https://img-blog.csdnimg.cn/7ad6fa80ddc546bc905ad5b95c80137d.png)
2. 远程仓库创建了新的分支 dev
![在这里插入图片描述](https://img-blog.csdnimg.cn/ebfe711be144467897b1d38583f46af2.png)
![在这里插入图片描述](https://img-blog.csdnimg.cn/7bff3206e68041559217dfcf380787ff.png)
- 通过命令
git remote show origin
,可以联网发现远程分支的最新修改。
![在这里插入图片描述](https://img-blog.csdnimg.cn/05bf0ac71b6a4aac8e441fdfbccf388e.png)
- 使用
git fetch
后,本地仓库就能跟踪到远程仓库的 dev 分支。
![在这里插入图片描述](https://img-blog.csdnimg.cn/d027fcfb50c141daa390977531917485.png)
![在这里插入图片描述](https://img-blog.csdnimg.cn/d92670fb6cf7452ca9954038379d6b61.png)
3. 远程仓库删除了 dev 分支
![在这里插入图片描述](https://img-blog.csdnimg.cn/96454f63fa1c4ff39c1416918afe4c63.png)
![在这里插入图片描述](https://img-blog.csdnimg.cn/9aa25fd44eb44aa58b90db2a50f87262.png)
- 注意:
git fetch
并不能在本地仓库删除 对应远程仓库分支的删除。
![在这里插入图片描述](https://img-blog.csdnimg.cn/61b77e66ed5542b4ba5939e230109d11.png)
- 使用命令
git fetch --prune
就可以删除本地仓库上,远程仓库已经不在了的分支。
![在这里插入图片描述](https://img-blog.csdnimg.cn/4c6c60e9e86a456693dcf6b348ce78c3.png)
![在这里插入图片描述](https://img-blog.csdnimg.cn/3e4aa40534e7499289b9a94c327d9fcd.png)
4. 注意区分本地仓库的 dev 分支与远程仓库的 dev 分支
- git branch -vv 命令可以显示分支上游分支的关系(如果有)。
![在这里插入图片描述](https://img-blog.csdnimg.cn/1ca13c0128b4453a92676dedb7fb389e.png)
- 如下图,我们在本地仓库创建 dev 分支,可以看到该 dev 分支与远程仓库没有任何联系。
- 而本地仓库的 master 分支与远程仓库的 master 分支(origin/master)是有关联的。
![List item](https://img-blog.csdnimg.cn/1e8e84127fbe4319af93622b089a2c41.png)
5. 远程分支的 merge
- 注意,git fetch 只是将远程仓库的分支内容更新到本地仓库的 origin/master 分支上面。
- 即,git fetch 只是更新了本地仓库的 remotes/origin/master 内容,并没有更新本地仓库的 master 内容。它们是两个不同的分支。
- 所以,如果要将 remotes/origin/master 内容 更新到本地仓库的 master ,需要使用 merge 合并。
![在这里插入图片描述](https://img-blog.csdnimg.cn/bf04f2581c7e4e1ba7edc9b78ec0e732.png)
- 我们已经通过
git fetch
将远程仓库的 master 分支同步到本地仓库的 origin/master 分支了。 - 此时远程仓库的 master 分支与本地仓库的 origin/master 分支 相同。
- 但是 本地仓库的 master 分支,还需要合入 本地仓库的 origin/master 分支的内容。
- 此时,本地仓库的 master 分支,滞后于 本地仓库的 origin/master 分支。
![在这里插入图片描述](https://img-blog.csdnimg.cn/d75e7d0fda4b4566848f0bfa90a1d811.png)
- 我们通过 merge 操作,将 本地仓库的 origin/master 分支内容, 合并到本地仓库的 master 分支。
- 之后通过命令
git branch -vv
,可以看到,本地仓库的 master 分支,和本地仓库的 origin/master 分支相同。
![在这里插入图片描述](https://img-blog.csdnimg.cn/2e371642a1434638b3858fe06a5f1232.png)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)