本文已参与「新人创作礼」活动,一起开启掘金创作之路。
本节内容速览
- 二:
git push使用- 三:
git fetch使用、为什么存在git fetch机制- 四:
git pull使用、git fetch与git pull区别
一、前言
- 参考安装Git 详细安装教程
- 参考视频B站 Git最新教程通俗易懂,这个有点长,感觉讲的精华不多
- 参考视频『Git』知道这些就够了_哔哩哔哩_bilibili,这个精华多,推荐看这个
- 参考视频7小时学会Git 基础全套完整教程(从入门到精通)_哔哩哔哩_bilibili,这个虽然长,但是他偏实践,对小白友好,特别有意思
- 附一个Git动画学习网站
- Git教程 - 廖雪峰的官方网站 (liaoxuefeng.com)
讲讲小张的感受:我没有接触过Git,所以看了很多视频,对于入门使用确实只要知道git clone,git add,git commit,git push,git merge ,确实也就足够了。但是我很好奇背后的原理,为什么要用git add到暂存区而不是直接git commit?很多指令之间为什么要按一定的顺序执行?所以这个系列我以初学的时候,小白的角度从安装到工作原理(有的是我自己的见解,如果感觉不对,欢迎指正),再到实际应用!另外,推荐看一遍第三个参考视频,然后看一下第四个参考视频,对工作原理的讲解和实际应用确实不错!
二、git push上传新的分支
正常情况下直接git push就可以提交到远程仓库。但是在本地新建了一个分支4.0,在git push的时候报错,如下
这个错误就是 表示本地分支与远程分支之间没有连接起来,所以在git push的时候报错
解决方法 1
只需要在输入 git push -u origin dev(分支名)。这样就可以成功push
解决方法 2
按照git 的提示,执行以下命令:
git push --set-upstream origin dev
表示将远程 dev 分支和本地 dev 分支相关联。一般新建的分支在push的时候都需要执行这个命令和远端相关联
三、git fetch 拉取远程仓库
新建两个文件夹,分别clone我的一个仓库。模拟两台机器
新建一个分支,当前分支仅存在于本地。而远端没有这个分支,执行git push
总结:如果本地分支是新建的,也就是说没有设置上流分支,则需要使用
git push --set-upstream origin <name>,先设置上流分支。之后的所有提交直接使用git push即可
现在小王想要使用小张这个分支。使用git fetch查看新分支,仅是查看信息,并没有下载本地
利用git branch查看当前本地的分支信息
通过checkout切换到新分支,现在本地仓库的文件就切换成了新分支。==注意==必须先git fetch,否则checkout无效
这里新分支并不需要重新设置上流分支,直接
push即可。因为从远程仓库切的分支,git知道它的来源Q:为什么需要fetch机制
A:每次checkout的时候,Git直接去远程仓库检测是否有该分支。理论上可以,但是实际工作中,使用git是在本地切来切去。只有在团队协作时才需要和远程仓库交互。所以每次checkout都检测远程仓库,浪费网络资源
四、git pull 拉取远程仓库
如果此时小张修改了分支内的内容,再次push到了远程仓库。小王如何将新的变更更新到本地?可以fetch+merge,也可以pull。下载代码并快速合并,如果有冲突,手动合并并提交
# 拉取并合并当前分支 注意:只是当前分支!
git pull
或者
# 先拉取指定分支,后合并
git fetch origin master # 从远程主机的master分支拉取最新内容
git merge FETCH_HEAD # 将拉取下来的最新内容合并到当前所在的分支中
再或者
# 先拉取,后合并
git fetch # 从远程主机拉取所有分支的最新内容
git merge <分支名> # 将拉取下来的最新内容合并到当前所在的分支中
另一种情况是如果小张push到远程仓库后,小王把小张的程序修改了,小王是对旧版本做了更改,也push远程仓库就会报错。正常情况下先git pull到本地查看文件改动,如果有冲突,手动改动后再提交(先输入的命令后查看的文本,这里我上下截图顺序错了)
以下是后来对文章的改动,因为单独在
git merge 发过解决冲突,所以没有截图。避免有小伙伴不会解决冲突,单独解释一下
<<<HEAD 合并前的内容 = = = = = = = = 合并后,远程的内容 '>>>>>>> commitID
打开文本将文本修改为自己想要的样子
自己想要的样子xxxxxxx
然后执行git add .、git commit -m、git push
总结
所以建议使用fetch+merge,可以先git fetch,查看远程是否有新的更新?如果没有更新,不返回仍何值
如果有更新再用git merge origin <branch-name>将本地仓库与远程仓库合并
解决冲突后再进行
git push
附三篇我认为不错的文章
详解git pull和git fetch的区别:_马恩光的博客-CSDN博客_git pull和fetch的区别
Git fetch & pull 详解_MuffinFish的博客-CSDN博客_git pull
使用git fetch和git rebase处理多人开发同一分支的问题_azureternite的专栏-CSDN博客
在本节
- 三、git fetch 拉取远程仓库 部分下载云端分支需要通过
git checkout下载仓库中的分支,但是当远程有多个分支需要全部下载下来呢?- 或者
git clone默认克隆的只是main分支,需要一次下载所有的分支呢?
下节介绍
- 如何下载指定的云端分支
- 如何下载所有的云端分支