理解git fetch, git pull 以及 FETCH_HEAD的含义

理解 git fetch, git pull 

1. 【git remote】首先, git是一个分布式的结构,这意味着本地和远程是一个相对的名称。

本地的repo仓库要与远程的repo配合完成版本对应必须要有 git remote子命令,通过git remote add来添加当前本地长度的远程repo, 有了这个动作本地的repo就知道了当遇到git push 的时候应该往哪里提交代码。

2. 【git branch】其次,git天生就是为了多版本分支管理而创造的,因此分支一说,不得不提, 分支就相当于是为了单独记录软件的某一个发布版本而存在的,既然git是分布式的,便有了本地分支和远程分支一说,git branch 可以查看本地分支, git branch -r  可以用来查看远程分支。 本地分支和远程分支在git push 的时候可以随意指定,交错对应,只要不出现版本从图即可。

3. 【git merge】再者,git的分布式结构也非常适合多人合作开发不同的功能模块,此时如果每个人都在其各自的分支上开发一个相对独立的模块的话,在每次release制作时都需先将各成员的模块做一个合并操作,用于合并各成员的工作成果,完成集成。 此时需要的就是git merge.

4.【git push 和 commit-id】在每次本地工作完成后,都会做一个git commit 操作来保存当前工作到本地的repo, 此时会产生一个commit-id,这是一个能唯一标识一个版本的序列号。 在使用git push后,这个序列号还会同步到远程repo。

在理解了以上git要素之后,分析git fetch 和 git pull 就不再困难了。 

 

首先,git fetch 有四种基本用法

1. git fetch            →→ 这将更新git remote 中所有的远程repo 所包含分支的最新commit-id, 将其记录到.git/FETCH_HEAD文件中

2. git fetch remote_repo         →→ 这将更新名称为remote_repo 的远程repo上的所有branch的最新commit-id,将其记录。 

3. git fetch remote_repo remote_branch_name        →→ 这将这将更新名称为remote_repo 的远程repo上的分支: remote_branch_name

4. git fetch remote_repo remote_branch_name:local_branch_name       →→ 这将这将更新名称为remote_repo 的远程repo上的分支: remote_branch_name ,并在本地创建local_branch_name 本地分支保存远端分支的所有数据。

 

FETCH_HEAD: 是一个版本链接,记录在本地的一个文件中,指向着目前已经从远程仓库取下来的分支的末端版本。

 

git pull 的运行过程:

git pull : 首先,基于本地的FETCH_HEAD记录,比对本地的FETCH_HEAD记录与远程仓库的版本号,然后git fetch 获得当前指向的远程分支的后续版本的数据,然后再利用git merge将其与本地的当前分支合并。

 

参考链接 :  

1.https://ruby-china.org/topics/4768

2.http://stackoverflow.com/questions/9237348/what-does-fetch-head-in-git-mean

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: git fetchgit pull都是git版本控制系统中的命令,都可以用于从远程仓库中获取更新。它们的区别在于git fetch只是将远程仓库中的内容更新到本地,而不会自动合并到本地分支中;而git pull = git fetch + git merge,即先通过git fetch获取远程更新,再将这些更新自动合并到本地分支中。 使用git fetch可以掌握远程仓库的最新消息,但是你需要手动将这些更新合并到你的本地分支中以让你更新的文件数量得到更新。这就意味着,如果你要查找特定的提交或检查其他分支的状态,git fetch是一个不错的选择,因为它不会覆盖本地更改。 相反,git pull可以自动将最新的代码更新到本地,它相当于同时执行了git fetchgit merge命令。因此,如果你不需要查看远程仓库的更改并手动合并更新,那么使用git pull会更加方便快捷。 总的来说,git fetchgit pull都是获取远程仓库中的更新的命令,只不过git pull会自动合并到本地分支中,而git fetch则需要手动合并。具体使用哪个命令取决于你的需求以及实时情况。 ### 回答2: git fetchgit pullgit中常用的两个指令,它们可以帮助我们在本地仓库中获取远程仓库的更新内容。它们的区别在于: Git fetch会将远程仓库的最新版本下载到本地仓库的缓存区,但并不自动合并到工作目录中。这意味着你可以使用git fetch来查看远程仓库的最新版本,然后再根据自己的需要选择是否要合并到当前分支。你可以使用git merge来合并这些更新。 Git pull则将远程仓库的最新版本自动合并到你的工作目录中,它其实是git fetchgit merge这两个操作的合并。如果你想要将远程仓库中的更新同步到本地并快速合并到当前分支,则可以使用git pull。 在使用git fetchgit pull的过程中,你需要注意以下几点: 首先,你需要在执行这些指令之前先将本地的修改提交或者暂存,否则会出现冲突和数据丢失的情况。 第二,当你执行git fetch命令时,可以通过指定远程仓库的名称和分支名称,来缩小获取更新的范围,避免下载整个仓库的更新,节省时间和网络流量。 第三,当你使用git pull命令时,如果出现冲突,需要手动解决冲突后再提交。 综上所述,git fetchgit pull是获取远程仓库更新的两个常用指令,它们的区别在于是否自动合并到工作目录中。在实际操作中需要根据自己的需要选择使用哪个指令,并注意避免出现冲突和数据丢失。 ### 回答3: git fetchgit pull都是git中比较常用的命令,它们都能够从远程仓库将代码更新到本地仓库,但是它们的方式与执行结果略有不同。 首先,git fetch命令会从远程仓库拉取最新的代码,但是并不会自动将代码合并到本地仓库中。它会将代码更新到本地仓库中的远程分支中,你需要使用其他命令将这些更新合并到本地分支中。git fetch命令的一些常用选项包括: -f:强制执行fetch操作,即使本地分支与远程分支存在冲突; -p:下载所有分支及其相关的git tags; -v:输出详细的下载进度。 另一方面,git pull命令则将最新代码从远程仓库拉取到本地仓库中,并自动执行合并。一般情况下,它会首先执行git fetch,然后再自动将远程分支合并到本地分支中。git pull命令的常用选项包括: -m <msg>:使用指定的合并信息; -r:使用rebase的方式将本地变更应用到从上游分支中获取的代码之前; --no-rebase:禁用rebase并使用合并(merge)的方式将本地变更应用到从上游分支中获取的代码之前。 总的来说,git fetchgit pull都是将代码从远程仓库同步到本地仓库中的命令,它们的区别在于前者只会更新本地仓库中的远程分支,需要手动合并,而后者则会自动执行合并操作。具体使用哪一个命令,要根据实际情况进行选择。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值