git的一些使用技巧(git fetch 和 git pull的区别,git merge 和 git rebase的区别)

最近闲来无聊,虽然会使用git操作,但是 git fetchgit pull 的区别,git mergegit rebase的区别只是一知半解,稍微研究一下;

git fetchgit pull 的区别

git fetch

git fetch 是将远程仓库中的改动拉到本地,但是不会主动和本地项目中的代码进行合并,需要你主动操作git merge,然后才能进行合并。

git pull

git pull 其实就等于 git fetch + git merge,它会拉取指定的分支,然后主动和本地当前的分支代码进行合并,如果产生冲突会需要你进行解决。

git mergegit rebase 的区别
git merge

git merge是将远端代码合并到本地,同时会产生一条 merge branch xxx into xxxx 的记录,同时会保留所有的提交细节。

git rebase

git rebase 则是变基,这里我采用git 官方介绍的一个实例来解释;

如下图,当我们新开发的分支 experiment 已经和master有了分叉后,我又不想使用merge的方式,那么就可以采用rebase的方式来处理。

我们使用rebase方式可以将我们的c4提交提取出来,在c3的基础上应用一次。这种方式就叫变基。同样你也可以使用 rebase 命令将提交到某一分支上的所有修改都移至另一分支上。

bash 复制代码
$ git checkout experiment
$ git rebase master
First, rewinding head to replay your work on top of it...
Applying: added staged command

它的原理是首先找到这两个分支(即当前分支 experiment、变基操作的目标基底分支 master) 的最近共同祖先 C2,然后对比当前分支相对于该祖先的历次提交,提取相应的修改并存为临时文件, 然后将当前分支指向目标基底 C3, 最后以此将之前另存为临时文件的修改依序应用。

其实就是将提交变得更加线性,不会有分叉出现。类似于比较提交的c3和c4后直接将c4提交挂在了c3后同时并没有生成merge操作的那条记录。

建议慎重使用rebase操作,如果其他人和你同时开发一条分支,强烈建议不要使用rebase操作

最近看到克隆代码的时候有这样的一个操作

bash 复制代码
git clone --depth=1 -branch master http://xxxxxxxx

--depth=1指的是克隆的深度。不会下载 Git 协作的历史记录,这样可以大大加快克隆的速度
depth用于指定克隆深度,为1即表示只克隆最近一次commit

适合用git clone --depth=1的场景:你只是想clone最新版本来使用或学习,而不是参与整个项目的开发工作

如果在历史协作版本中,如果有个人提交了1G的文件,然后又删掉了,那么你完整克隆的时候,这1G的文件也会被下载下来放在git的版本控制中。

假如后面我又想拉取全部的记录和分支怎么办呢?

bash 复制代码
修改.git/config文件中的
fetch = +refs/heads/master:refs/remotes/origin/master
为
fetch = +refs/heads/*:refs/remotes/origin/*
然后执行

git fetch --all
相关推荐
2401_8260976218 小时前
同步&异步日志系统-日志落地模块的实现
c++·git·vim
半旧夜夏19 小时前
阿里云IOT消息处理
java·ide·git·物联网·spring·阿里云
我们的五年20 小时前
【Git版本控制器】第三弹——版本回退,撤销修改,删除文件
大数据·linux·git
一名嵌入式糕手20 小时前
Git从基础到进阶
git
不cong明的亚子21 小时前
github用户名密码登陆失效了
git·github
QC七哥21 小时前
git开发流程以及github社区企业版
git·github
邂逅you1 天前
GitHub基本操作及Git简单命令
git·github
EngZegNgi1 天前
git 提示 fatal: The remote end hung up unexpectedly
git
ricky_fan1 天前
本地部署MindSearch(开源 AI 搜索引擎框架),然后上传到 hugging face的Spaces——L2G6
人工智能·git·python
misty youth1 天前
github与git bash绑定问题
git·github·bash