草庐IT

git 远程分支与本地分支

滨边美波她男友 2023-08-23 原文

前言

  1. 远程仓库上只有 1 个 master 分支。
  2. 复制远程仓库的地址。


3. 克隆远程仓库到本地。

一、

  • 注意:本地的 head 和 master 文件都存在,但是 remote 的 master 信息是保存在文件 .git/packed-refs 中。

  • 可以看到,当前 HEAD 指针指向本地仓库的 master 分支。同时远程仓库的 mater 分支的最新 commit 和本地仓库 master 分支的 commit 一样。
  • 但是注意:origin/master, origin/HEAD 指向的 commit ,只是我们执行 git clone那一刻,远程仓库上 master 分支指向的 commit。本地仓库保存的origin/master, origin/HEAD 可能已经和远程仓库的 master 分支 commit 不一样了。

  • git-fetch - Download objects and refs from another repository.
  • fetch 命令用于 从本地仓库保存的远程分支 origin/master ,更新远程仓库的最新 commit 信息到本地,或者更新远程仓库的其他分支信息(如新创建的 dev 分支)到本地。

  • 实际上, git branchgit remote 命令显示的都是保存在了本地仓库的信息,并不是实时从远程仓库获取最新信息。

  • 那么我们必须知道远程仓库的最新信息,才能决定是否需要执行 git fetch 从远程仓库拉取:最新的 commit 提交,或者最新的 dev 分支信息
  • git remote show origin 命令通过连接网络,去获取本地分支与远程分支的关联情况。


二、演示远程仓库的更新

1. 远程仓库执行了新的 commit

  • 当前本地仓库保存的远程分支 master 和本地分支的 master 是相同的。

  • 模拟在远程分支上进行新的提交 commit。



  • 远程分支上提交了新的 commit,但是本地分支保存的 remote/origin 信息并不会主动更新。

  • 执行 fetch 从远程分支拉取最新信息到本地分支。
  • fetch 拉取的信息主要是:1).git/objects/ 目录下远程分支的 git obj 对象;2).git/refs/ 目录下远程分支的 origin 目录文件。

  • 注意:packed-refs 是在 git clone 时将压缩信息保存在其中的,只是 clone 时刻远程分支上的信息。
  • fetch 之后,.git/refs/remotes/origin/master 才是实时反映远程分支的信息。


2. 远程仓库创建了新的分支 dev

  • 首先在远程仓库创建新的分支 dev 。

  • 当前本地分支是看不到远程分支的任何最新修改的。

  • 通过命令git remote show origin,可以联网发现远程分支的最新修改。

  • 使用 git fetch 后,本地仓库就能跟踪到远程仓库的 dev 分支。



3. 远程仓库删除了 dev 分支

  • 注意:git fetch 并不能在本地仓库删除 对应远程仓库分支的删除。

  • 使用命令 git fetch --prune 就可以删除本地仓库上,远程仓库已经不在了的分支。



4. 注意区分本地仓库的 dev 分支与远程仓库的 dev 分支

  • git branch -vv 命令可以显示分支上游分支的关系(如果有)。

  • 如下图,我们在本地仓库创建 dev 分支,可以看到该 dev 分支与远程仓库没有任何联系。
  • 而本地仓库的 master 分支与远程仓库的 master 分支(origin/master)是有关联的。


5. 远程分支的 merge

  • 注意,git fetch 只是将远程仓库的分支内容更新到本地仓库的 origin/master 分支上面。
  • 即,git fetch 只是更新了本地仓库的 remotes/origin/master 内容,并没有更新本地仓库的 master 内容。它们是两个不同的分支。
  • 所以,如果要将 remotes/origin/master 内容 更新到本地仓库的 master ,需要使用 merge 合并。

  • 我们已经通过 git fetch 将远程仓库的 master 分支同步到本地仓库的 origin/master 分支了。
  • 此时远程仓库的 master 分支与本地仓库的 origin/master 分支 相同。
  • 但是 本地仓库的 master 分支,还需要合入 本地仓库的 origin/master 分支的内容。
  • 此时,本地仓库的 master 分支,滞后于 本地仓库的 origin/master 分支。

  • 我们通过 merge 操作,将 本地仓库的 origin/master 分支内容, 合并到本地仓库的 master 分支。
  • 之后通过命令 git branch -vv,可以看到,本地仓库的 master 分支,和本地仓库的 origin/master 分支相同。

有关git 远程分支与本地分支的更多相关文章

  1. ruby - 使用 C 扩展开发 ruby​​gem 时,如何使用 Rspec 在本地进行测试? - 2

    我正在编写一个包含C扩展的gem。通常当我写一个gem时,我会遵循TDD的过程,我会写一个失败的规范,然后处理代码直到它通过,等等......在“ext/mygem/mygem.c”中我的C扩展和在gemspec的“扩展”中配置的有效extconf.rb,如何运行我的规范并仍然加载我的C扩展?当我更改C代码时,我需要采取哪些步骤来重新编译代码?这可能是个愚蠢的问题,但是从我的gem的开发源代码树中输入“bundleinstall”不会构建任何native扩展。当我手动运行rubyext/mygem/extconf.rb时,我确实得到了一个Makefile(在整个项目的根目录中),然后当

  2. ruby - 是否可以覆盖 gemfile 进行本地开发? - 2

    我们的git存储库中目前有一个Gemfile。但是,有一个gem我只在我的环境中本地使用(我的团队不使用它)。为了使用它,我必须将它添加到我们的Gemfile中,但每次我checkout到我们的master/dev主分支时,由于与跟踪的gemfile冲突,我必须删除它。我想要的是类似Gemfile.local的东西,它将继承从Gemfile导入的gems,但也允许在那里导入新的gems以供使用只有我的机器。此文件将在.gitignore中被忽略。这可能吗? 最佳答案 设置BUNDLE_GEMFILE环境变量:BUNDLE_GEMFI

  3. git使用常见问题(提交代码,合并冲突) - 2

    文章目录git常用命令(简介,详细参数往下看)Git提交代码步骤gitpullgitstatusgitaddgitcommitgitpushgit代码冲突合并问题方法一:放弃本地代码方法二:合并代码常用命令以及详细参数gitadd将文件添加到仓库:gitdiff比较文件异同gitlog查看历史记录gitreset代码回滚版本库相关操作远程仓库相关操作分支相关操作创建分支查看分支:gitbranch合并分支:gitmerge删除分支:gitbranch-ddev查看分支合并图:gitlog–graph–pretty=oneline–abbrev-commit撤消某次提交git用户名密码相关配置g

  4. ruby - 在 Rails 项目中测试本地版本的 gem - 2

    我的Rails站点使用了一个确实不是很好的gem。每次我需要做一些新的事情时,我最终不得不花费与向实际Rails项目添加代码一样多的时间来为gem添加功能。但我不介意,我将我的Gemfile设置为指向我的gem的GitHub分支(我尝试提交PR,但维护者似乎已经下台)。问题是我真的没有找到一种合理的方法来测试我添加到gem的新东西。在railsc中测试它会特别好,但我能想到的唯一方法是a)更改~/.rvm/gems/.../foo。rb,这看起来不对或者b)升级版本,推送到Github,然后运行​​bundleup,这除了耗时之外显然是一场灾难,因为我不确定我所做的promise是否正

  5. ruby - Dropbox 类似 git 的服务——没有 rsync 和 inotify - 2

    关于如何使用git设置类似Dropbox的服务,您有什么建议吗?您认为git是解决此问题的合适工具吗?我在考虑使用git+rush解决方案,你觉得怎么样? 最佳答案 检查这个开源项目:https://github.com/hbons/SparkleShare来自项目的自述文件:Howdoesitwork?SparkleSharecreatesaspecialfolderonyourcomputer.Youcanaddremotelyhostedfolders(or"projects")tothisfolder.Theseprojec

  6. ruby - 混帐 & ruby : How can I unset the GIT_DIR variable from inside a ruby script? - 2

    我编写了一个非常简单的“部署”脚本,作为我的裸git存储库中的post-updateHook运行。变量如下livedomain=~/mydomain.comstagingdomain=~/stage.mydomain.comgitrepolocation=~/git.mydomain.com/thisrepo.git(bare)core=~/git.mydomain.com/thisrepo.gitcore==addedremoteintoeachlive&stagegitslive和stage都初始化了gitrepos(非裸),我已经将我的裸仓库作为远程添加到它们中的每一个(名为co

  7. ruby - 让 bundler 使用 http : instead of git:? - 2

    我正在安装gitlabhq,并且在Gemfile中有对某些资源的“git://...”的引用。但是,我在公司防火墙后面,所以我必须使用http://。我可以手动编辑Gemfile,但我想知道是否有另一种方法告诉bundler使用http://作为git存储库? 最佳答案 您可以通过运行gitconfig--globalurl."https://".insteadOfgit://或通过将以下内容添加到~/.gitconfig:[url"https://"]insteadOf=git://

  8. ruby - 如何捕获所有 HTTP 流量(本地代理) - 2

    我希望访问我机器上的所有HTTP流量(我的Windows机器-不是服务器)。据我了解,拥有一个本地代理是所有流量路线的必经之路。我一直在谷歌搜索但未能找到任何资源(关于Ruby)来帮助我。非常感谢任何提示或链接。 最佳答案 WEBrick中有一个HTTP代理(Rubystdlib的一部分)和here's一个实现示例。如果你喜欢生活在边缘,还有em-proxy伊利亚·格里戈里克。这postIlya暗示它似乎确实需要一些调整来解决您的问题。 关于ruby-如何捕获所有HTTP流量(本地代理)

  9. ruby-on-rails - Rails 3,在RAILS_ROOT上方显示来自本地文件系统的jpg图片 - 2

    我正在尝试找出一种方法来显示来自不在RAILS_ROOT下(在RedHat或Ubuntu环境中)的已安装文件系统的图像。我不想使用符号链接(symboliclink),因为这个应用程序实际上是通过Tomcat部署的,而当我关闭Tomcat时,Tomcat会尝试跟随符号链接(symboliclink)并删除挂载中的所有图像。由于这些文件的数量和大小,将图像放在public/images下也不是一种选择。我查看了send_file,但它只会显示一张图片。我需要在一个格式良好的页面中显示6个请求的图像。由于膨胀,我宁愿不使用Base64编码,但我不知道如何将图像数据与呈现的页面一起传递下去。

  10. ruby-on-rails - 安装 active admin 时 activeadmin.git (at master) is not yet checked out 错误 - 2

    Activeadmingem已添加到我的rails项目中,但每次我尝试安装railsgactive_admin:install时,我都会收到类似的错误git://github.com/activeadmin/activeadmin.git(atmaster)isnotyetcheckedout.Runbundleinstallfirst.我肯定在运行“railsgactive_admin:install”之前运行了bundle。运行“bundleshow”后,我看到我已将“*activeadmin(1.0.0.pre3f916d6)”添加到我的项目中,但不断收到此错误消息。我的gem文

随机推荐