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
相关推荐
b1ng9 小时前
新人程序员 Git 一站式指南
git·github
程序员的世界你不懂10 小时前
IDE 关联 Git 操作
ide·git
weixin_4284984911 小时前
Git Submodule 介绍和使用指南
git
jingshaoqi_ccc1 天前
GitKraken最后一个免费版本和下载地址
git·github·gitkraken·版本管理工具
乌云暮年1 天前
Git简单命令
git·gitee·github·batch命令
用户1259265423201 天前
使用 Docker 搭建 Gitea 并实现 Git HTTP 自动登录
git
一只毛驴1 天前
谈谈对git stash的理解?
git
长风破浪会有时呀1 天前
Git 学习笔记
笔记·git·学习
中微子2 天前
Git Rebase 详解:概念、原理与实战示例
git
荔枝吻2 天前
【保姆级喂饭教程】Windows下安装Git Flow
windows·git·git flow