git命令 远程

2023-05-16

文章目录

  • pull & push Git仓库
      • 克隆远程仓库`git clone`
      • 远程分支
      • 从远程仓库获取数据`git fetch`
      • 从远程仓库获取数据`git pull`
      • 上传数据到远程仓库`git push`
      • 偏离的提交历史
  • origin和它的周边 -- 远程仓库的高级操作
      • 推送主分支
      • 合并远程仓库
      • 远程跟踪分支
      • `git push`的参数
        • `place`参数详解
      • `git fetch`的参数
      • 没有source的source
      • `git pull`的参数

pull & push Git仓库

克隆远程仓库git clone

现在用网站来对远程仓库进行可视化操作变得越发流行了(像 Github 或 Phabricator), 但远程仓库永远是这些工具的顶梁柱, 因此理解其概念非常的重要!

git clone 命令在真实的环境下的作用是在本地创建一个远程仓库的拷贝(比如从 github.com)。

远程分支

远程分支有一个命名规范 —— 它们的格式是:

<remote name>/<branch name>

因此,如果你看到一个名为 o/master 的分支,那么这个分支就叫 master,远程仓库的名称就是 o。

大多数的开发人员会将它们主要的远程仓库命名为 origin,并不是 o。这是因为当你用 git clone 某个仓库时,Git 已经帮你把远程仓库的名称设置为 origin 了

不过 origin 对于我们的 UI 来说太长了,因此不得不使用简写 o 😃 但是要记住, 当你使用真正的 Git 时, 你的远程仓库默认为 origin!

当 o/master 分支添加新的提交时 o/master 也不会更新。这是因为 o/master 只有在远程仓库中相应的分支更新了以后才会更新。

从远程仓库获取数据git fetch

git fetch 完成了仅有的但是很重要的两步:

从远程仓库下载本地仓库中缺失的提交记录
更新远程分支指针(如 o/master)

git fetch 实际上将本地仓库中的远程分支更新成了远程仓库相应分支最新的状态。

如果你还记得上一节课程中我们说过的,远程分支反映了远程仓库在你最后一次与它通信时的状态,git fetch 就是你与远程仓库通信的方式了!希望我说的够明白了,你已经了解 git fetch 与远程分支之间的关系了吧。

git fetch 通常通过互联网(使用 http:// 或 git:// 协议) 与远程仓库通信。

git fetch 并不会改变你本地仓库的状态。它不会更新你的 master 分支,也不会修改你磁盘上的文件。你可以将 git fetch 的理解为单纯的下载操作。

从远程仓库获取数据git pull

git pull 就是 git fetch 和 git merge 的缩写
git pull --rebase 就是 git fetch 和 git rebase 的缩写

上传数据到远程仓库git push

git push 负责将你的变更上传到指定的远程仓库,并在远程仓库上合并你的新提交记录。一旦 git push 完成, 你的朋友们就可以从这个远程仓库下载你分享的成果了!

注意 —— git push 不带任何参数时的行为与 Git 的一个名为 push.default 的配置有关。它的默认值取决于你正使用的 Git 的版本,但是在教程中我们使用的是 upstream。 这没什么太大的影响,但是在你的项目中进行推送之前,最好检查一下这个配置。

偏离的提交历史

如果多人协作开发,很容易发生代码冲突,导致上传失败。
解决方式:

  • rebase(希望线性历史记录)/merge(希望还原真实开发顺序)的方式,先和远程仓库当前版本同步,然后再上传
  • 手动合并分支(一般在高级的IDE中较为实用)

origin和它的周边 – 远程仓库的高级操作

推送主分支

在大型项目中开发人员通常会在(从 master 上分出来的)特性分支上工作,工作完成后只做一次集成。这跟前面课程的描述很相像(把 side 分支推送到远程仓库),不过本节我们会深入一些.

但是有些开发人员只在 master 上做 push、pull —— 这样的话 master 总是最新的,始终与远程分支 (o/master) 保持一致。

所以,多人参与的master分支会存在远程和本地都更新了历史记录的情况。这就需要通过git pullgit pull --rebase进行本地的同步。

合并远程仓库

为了 push 新变更到远程仓库,你要做的就是包含远程仓库中最新变更。意思就是只要你的本地分支包含了远程分支(如 o/master)中的最新变更就可以了,至于具体是用 rebase 还是 merge,并没有限制。

所以,工作时可以结合实际需求使用。

远程跟踪分支

master 与 o/master 是相关的。

pull 操作时, 提交记录会被先下载到 o/master 上,之后再合并到本地的 master 分支。隐含的合并目标由这个关联确定的。
push 操作时, 我们把工作从 master 推到远程仓库中的 master 分支(同时会更新远程分支 o/master) 。这个推送的目的地也是由这种关联确定的!

master 和 o/master 的关联关系就是由分支的“remote tracking”属性决定的。master 被设定为跟踪 o/master —— 这意味着为 master 分支指定了推送的目的地以及拉取后合并的目标。

当你克隆时, Git 会为远程仓库中的每个分支在本地仓库中创建一个远程分支(比如 o/master)。然后再创建一个跟踪远程仓库中活动分支的本地分支,默认情况下这个本地分支会被命名为 master。

克隆完成后,你会得到一个本地分支。这样做对于本地仓库和远程仓库来说,都是最佳选择。这也解释了为什么会在克隆的时候会看到下面的输出:

local branch “master” set to track remote branch “o/master”

可以让任意分支跟踪 o/master, 然后该分支会像 master 分支一样得到隐含的 push 目的地以及 merge 的目标。 有两种方法设置这个属性:

  • 初始化分支并且追踪远程目标分支git checkout -b <初始化分支名称> <远程目标分支名称>git checkout -b totallyNotMaster o/master
  • 已存在的本地分支追踪远程目标分支git branch -u <远程目标分支名称> <本地分支名称>git branch -u o/master foo如果当前就在 foo 分支上, 还可以省略 foogit branch -u o/master

git push的参数

语法:git push <remote> <place>
<remote>参数为origin
<place> 参数有两种使用方式。我们稍后会深入其中的细节, 先看看例子, 这个命令是:

git push origin master

把这个命令翻译过来就是:

切到本地仓库中的“master”分支,获取所有的提交,再到远程仓库“origin”中找到“master”分支,将远程仓库中没有的提交记录都添加上去,搞定之后告诉我。

我们通过“place”参数来告诉 Git 提交记录来自于 master, 要推送到远程仓库中的 master。它实际就是要同步的两个仓库的位置。

需要注意的是,因为我们通过指定参数告诉了 Git 所有它需要的信息, 所以它就忽略了我们所检出的分支的属性!

place参数详解

如果来源和去向分支的名称不同。比如你想把本地的 foo 分支推送到远程仓库中的 bar 分支。只需要用冒号 : 将二者连起来就可以了:

git push origin refspec
同
git push origin <source>:<destination>

<source>:<destination>参数实际的值是个 refspec,“refspec” 是一个自造的词,意思是 Git 能识别的位置(比如分支 foo 或者 HEAD~1)例git push origin off^:bar

git fetch的参数

git fetch 的参数和 git push 极其相似。他们概念相同,方向相反。

git fetch origin refspec

Git 会到远程仓库的 foo 分支上,然后获取所有本地不存在的提交,放到本地的 o/foo 上。意思就是删除远程仓库的分支。它不会更新你的本地的非远程分支, 只是下载提交记录(这样, 你就可以对远程分支进行检查或者合并了)。如果 git fetch 没有参数,它会下载所有的提交记录到各个远程分支

没有source的source

git push origin :side # 会删除远程仓库的side分支
git fetch origin :bugFix # 会在本地创建一个新的分支

git pull的参数

以下命令在 Git 中是等效的:

git pull origin foo 相当于:git fetch origin foo; git merge o/foo

最终合并到本地的检出位置,无论我们当前检出位置是哪里。

还有…
git pull origin bar~1:bugFix 相当于:git fetch origin bar~1:bugFix; git merge bugFix

git pull 实际上就是 fetch + merge 的缩写, git pull 唯一关注的是提交最终合并到哪里(也就是为 git fetch 所提供的 destination 参数)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

git命令 远程 的相关文章

  • 我可以忽略全局 .gitignore 吗?

    我的全局 gitignore 一般都很棒 但对于这个一次性项目 我不希望应用全局规则 如何删除这个怪异存储库的全局 gitignore 规则 在您的存储库中运行此命令 git config local core excludesfile f
  • 在 .gitconfig 中隐藏 GitHub 令牌

    我想将所有点文件存储在 GitHub 上 包括 gitconfig 这需要我将 GitHub 令牌隐藏在 gitconfig 中 为此 我有一个 gitconfig hidden token 文件 这是我打算编辑并放在隐藏令牌的 git 下
  • 为什么 git-svn 应该积极搜索旧历史?

    当我运行 git svn clone s 时发生了一些奇怪的事情 尽管以下信息告诉我们不要惊慌 但我想知道为什么会出现这种 svn 错误 为什么这个路径不存在 是被别人删除了吗 如果是 为什么 git svn 应该积极搜索旧历史记录 Ini
  • git-svn 如何知道要提交到哪个分支?

    我的存储库是 SVN 我使用 git 进行所有开发 我们有一个标准布局 我用以下命令初始化了我的本地存储库git svn init s
  • Jenkins GIT 包含从未构建过的区域

    我正在尝试使用包含区域在 Jenkins 中构建我的工作 但每当选中此选项时 民意调查结果总是说未检测到任何更改 我尝试了许多不同的路径 以及使用工作区进行 不进行强制轮询 结果是轮询从未检测到任何更改 但一旦我删除这些选项 它们就会在下一
  • 如何使用 git --word-diff 显示空格差异?

    为了说明问题 参见diff https github com nim lang Nim commit 47c7fd037ed28b7de3d120b003d059d30e18f128 diff split diff 8af935b2312d
  • 合并后 Git 分支和提交历史记录

    我正在开发一个项目 单独 对于我开发的每个功能 我都会创建一个新分支 处理该功能 然后将其合并到 master 中 所以通常我不会同时在两个不同的分支上工作 也不会在一个分支上工作时接触master 当我合并一个分支时 我看到 使用gitx
  • VS Code 在交互式变基期间不会等待我 [重复]

    这个问题在这里已经有答案了 如果我使用交互式变基git rebase i使用为 Git 配置的默认编辑器 一切都运行良好 如果我在我的全局中添加以下内容 gitconfig core editor C Program Files x86 M
  • Android repo 脚本创建的 .repo/projects/ 中的裸 git 存储库的用途是什么?

    The 安卓源码 http android git kernel org 由以下人员管理repo http source android com source version control html 使用 repo 同步时 一个名为 re
  • 创建多个 git 分支的联合分支

    我希望能够在现有分支之上分层其他分支 并独立修改这些分支 这很有用 例如 允许将各个子项目的二进制文件统一到同一个项目中bin目录 一般来说 给定的文件仅存在于一层中 理想情况下 我想我会使用 unionfs 来完成此任务 但它必须以某种方
  • 删除 Xcode 项目的源代码控制

    我在 Xcode 项目上使用源代码控制已经有一段时间了 但现在我不想使用源代码控制 如何从 Xcode 中的项目中删除源代码控制 有三种方法 方法 1 将禁用所有项目的源代码管理 方法 2 将删除所有项目的单个存储库的链接 方法 3 将删除
  • git am 和 git apply 有什么区别?

    Both git am https git scm com docs git am and git apply https git scm com docs git apply可用于应用补丁 看起来git am自动提交 而git apply
  • 为什么从网上下载Git 2.0,总是得到1.9.4的安装包?

    为什么从网上下载Git 2 0 总是得到1 9 4的安装包 为什么你不能在互联网上的任何地方找到一个不仅标记为 2 0 而且你下载的安装存档也标记为这样的 Git 安装程序包 例如 这个2 1 3 站点 http git scm com d
  • Git撤销本地分支删除

    我刚刚删除了错误的分支 并进行了一些我需要的实验性更改git branch D branchName 如何恢复分支 您可以使用git reflog http git scm com docs git reflog查找分支最后一次提交的 SH
  • 如何在现有裸存储库中创建引用日志信息

    您可能已经知道 默认情况下 git 不会为新的裸存储库启用引用日志更新 问题是 我有一个很长的历史存储库 但它是在我设置 logAllRefUpdates 标志之前创建的 现在我希望其他应用程序可以使用该信息 如何通过对现有存储库进行最少的
  • Git - 使用过滤器分支删除带有空变更集的提交

    如何使用 git filter branch 删除没有变更集的提交 我使用以下方法重写了我的 git 历史记录 git filter branch tree filter rm r f my folder f HEAD 效果很好 但现在我有
  • 是否可以使用“git gc”来打包引用日志对象?

    正如答案所暗示的https stackoverflow com a 32025729 https stackoverflow com a 32025729我已经配置了远程裸仓库 git config gc pruneExpire never
  • 我如何才能看到 Github 风格的东西,例如 git -repo 的打孔卡和时间线?

    我正在寻找一个可以可视化 git repo 工作的软件 我喜欢 Github 的一些功能和 Bitbucket 的一些功能 所以我不想使用它们 因为它们并不完美 我正在寻找创建类似视觉特征的方法 下面你可以找到一些部分 但仍然缺少很多谜题
  • Git 忽略本地文件更改

    我都尝试过 git update index assume unchanged config myconfig and editing git info exclude并添加config myconfig 然而 当我执行 git pull
  • gitignore 匹配子目录中带有前缀和后缀的文件

    我喜欢只跟踪以 es 开头并以 h 或 m 结尾的文件 所以我尝试了这个 exlude all except es h es m and exlude all except es h es m 但对于子目录中的文件都不起作用 当你忽略一切

随机推荐

  • HTTP | HTTP报文

    01概述 客户端与服务器端之间的通信 xff0c 通过HTTP协议 xff0c 以HTTP报文的形式来实现数据的交互 HTTP报文是HTTP通信时发送的数据块 xff0c 本文主要从以下几个方面介绍HTTP报文 xff1a HTTP报文结构
  • k8s赋予用户进入容器以及向容器中拷贝文件的权限

    在k8s中集群中赋予用户进入容器以及向容器中拷贝文件的权限 xff0c 自定义clusterrole如下 xff1a span class token key atrule apiVersion span span class token
  • 翔仪 垂直起降固定翼 操作流程

    翔仪 垂直起降固定翼 操作流程 垂直起降固定翼 操作流程 01 地面站采用的是翔仪飞控软件 02 奥维互动定位平台 上规划飞行区域 长方形 为佳 覆盖作业范围200米以上 xff08 防止漏拍发生 xff09 导出KML格式 地图切换里面
  • 一、初识FreeRTOS之FreeRTOS简介

    目录 一 什么是FreeRTOS xff1f 二 为什么选择FreeRTOS xff1f 三 FreeRTOS的特点 四 FreeRTOS资料与源码下载 五 FreeRTOS源码文件介绍 一 什么是FreeRTOS xff1f Free即免
  • Hbase使用scan(get)过滤器查询封装(java)

    在hbase上使用过滤器查询 xff1a 指定参数 xff0c 指定返回字段 xff0c 指定对象 xff0c 指定单 xff08 多 xff09 版本 Collection lt E gt 详情见以下 xff1a Map lt K V g
  • 单片机12864带字库汇编使用教程

    一丶引脚说明 Lcd12864 xff08 带字库版本 xff0c ST7920为主芯片驱动 xff09 xff08 正面 xff09 xff08 反面 xff09 由于是带字库版本 xff0c 与不带字库版本有出入 xff0c 其部分引脚
  • Jetson Xavier NX学习笔记(三)系统烧录+开机教程+YOLOv7环境搭建+错误总结(详细版)

    Jetson Xavier NX 系统烧录 43 开机教程 43 YOLOv7环境搭建 43 错误总结 xff08 详细版 xff09 文章目录 Jetson Xavier NX 系统烧录 43 开机教程 43 YOLOv7环境搭建 43
  • UDP网络编程

    一 UDP的概念 1 1 UDP 面向无连接 xff08 无连接 xff0c 是因为UDP里有了对方的地址 xff0c 直接发就好 xff09 特点 xff1a 1 邮件系统服务模式的抽象 2 每个分组都携带完整的目的地址 3 不能保证分组
  • 全网最详细SUMO仿真软件教程——入门篇

    目录 SUMO下载前提知识使用netedit创建路网需求生成SUMO GUI可视化 SUMO下载 SUMO官网 SUMO下载链接 配置SUMO HOME系统变量 xff0c 后续引入包需要 前提知识 sumo仿真器跑起来需要有三个文件 xf
  • 遥感图像场景分类常用数据集

    1 UC Merced Land Use Data Set 图像像素大小为256 256 xff0c 总包含21类场景图像 xff0c 每一类有100张 xff0c 共2100张 下载地址 xff1a http weegee vision
  • 用vs code连接虚拟机(夜神模拟器)

    手机模拟器设置 打开夜神模拟器的bin目录 xff08 右键夜神模拟器 xff0c 打开文件所在位置 xff09 xff0c 如果是windows10 xff0c 就在文件夹下输入 nox adb exe connect 127 0 0 1
  • 数字加减---多线程案例

    package wzr thread test1 经典的多线程开发操作 xff0c 程序中需要考虑的核心是 xff1a 加一个 xff0c 减一个 xff0c 只在0 1之间 public class Test public static
  • mysql下载安装,详细流程

    下载 https dev mysql com 在水平导航栏点击download 点击MySQL Community GPL Downloads 进入后点击MySQL Installer for Windows 下载安装包是32bit的 xf
  • spring5——2.webflux,响应式编程,执行流程及核心API

    什么是响应式编程 在计算机中 xff0c 响应式编程或反应式编程 xff08 英语 xff1a Reactive programming xff09 是一种面向数据流和变化传播的编程范式 这意味着可以在编程语言中很方便地表达静态或动态的数据
  • springboot——测试时bean无法注入的问题

    问题描述 xff1a 当我在test测试类中测试无法注入 64 Dao类时 xff0c 我去main java下测试 xff0c 是否可以使用这个Dao类 xff0c 结果成功调用 于是我定位到这个问题就是测试时无法注入 猜测可能是 64
  • springboot——跨域(nginx,cors)

    跨域访问 xff0c 是指从一个域名的网页去请求另一个域名的资源 比如从www baidu com 页面去请求 www google com 的资源 但是一般情况下不能这么做跨域访问 xff0c 因为有浏览器的 同源策略 存在 xff0c
  • Python 三大神器:pip,virtualenv(virtualenvwrapper),fabric

    pip用来管理包 文档 xff1a https pip pypa io en latest installing html 介绍 xff1a pip 是 Python 包管理工具 xff0c 该工具提供了对Python 包的查找 下载 安装
  • git命令 本地

    目录 基础命令提交分支合并合并 创造线性的提交历史 高级命令分离HEAD相对引用撤销变更 自由移动提交记录 96 git rebase i 96 的使用说明 提交的技巧里程碑的使用 基础命令 提交 提交git commit 提交 包含信息g
  • git命令大全

    文章目录 仓库配置增加 删除文件代码提交分支标签查看信息远程同步撤销其他 仓库 在当前目录新建一个Git代码库 git init 新建一个目录 xff0c 将其初始化为Git代码库 git init project name 下载一个项目和
  • git命令 远程

    文章目录 pull amp push Git仓库克隆远程仓库 96 git clone 96 远程分支从远程仓库获取数据 96 git fetch 96 从远程仓库获取数据 96 git pull 96 上传数据到远程仓库 96 git p