Git 与远程分支

90.远程仓库和分支

我们经常需要对远程仓库里的分支进行更新。

当从远程库 clone 时,默认情况下,只会拉取 master ​分支,并且会将本地的 master 分支和远程的 master 分支关联起来:

$ git branch
* master

推送本地分支

推送分支,就是把该分支上的所有本地提交推送到远程库。本地新建的分支如果不推送到远程,对其他人就是不可见的。

推送时,要指定本地分支,这样,Git 就会把该分支推送到远程库对应的远程分支上:

$ git push origin master

如果要推送其他分支,比如 dev​,就改成:

$ git push origin dev

实践(先确保工作区是 clean 的):

$ git switch -c remotebranch
Switched to a new branch 'remotebranch'# 创建一个新的文件夹
$ mkdir 4-remotebranch$ echo "remote branch" >> ./4-remotebranch/remote.txt
$ git add .
$ git commit -m "add remote.txt"
$ git push gitee remotebranch

然后我们在另一个目录里克隆该项目:

$ git clone git@gitee.com:peterjxl/LearnGit.git$ ls
Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d-----        2023-01-15     12:03                1-diffAndPath
d-----        2023-01-15     12:03                2-versionControl
d-----        2023-01-15     12:03                4-diff
-a----        2023-01-15     12:03              9 .gitignore
-a----        2023-01-15     12:03             34 readme.md

可以看到是没有 4-remotebranch 这个文件夹的。

注意:

  1. origin 和分支名请修改为自己的
  2. 并不是一定要把所有本地分支往远程推送,这取决于该分支是否要和其他小伙伴合作开发

拉取远程分支

多人协作时,大家都会往 master ​和 dev ​分支上推送各自的修改。我们一般会定期(比如每天)从分支上拉取最新的代码。

如何查看远程分支上有什么分支呢?可以用 git branch -r​:

$ git branch -rgitee/featuregitee/mastergithub/featuregithub/master

如果涉及到多人开发一个分支,但我们从远程仓库 clone 的时候,只有 master 分支;

这时就得拉取远程 origin ​的 dev ​分支到本地,并关联起来:

$ git switch -c dev origin/dev

这样,我们就可以在 dev ​上继续修改,并时不时地把 dev ​分支 push ​到远程:

$ git add env.txt
$ git commit -m "add env"
$ git push origin dev

而其他开发 dev 分支的小伙伴,则需要定期从 dev 分支拉取更新:

$ git pull

拉取的时候可能会有冲突,需要手动解决,参考前几篇博客。

如果 git pull ​提示 no tracking information​,则说明本地分支和远程分支的链接关系没有创建,用命令 git branch --set-upstream-to <branch-name> origin/<branch-name>​。

实践:我们接着上面的例子来,创建一个分支并关联:

$ git switch -c remotebranch origin/remotebranch
Switched to a new branch 'remotebranch'
branch 'remotebranch' set up to track 'origin/remotebranch'.$ ls
Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d-----        2023-01-15     12:03                2-versionControl
d-----        2023-01-15     12:03                3-branch
d-----        2023-01-15     12:03                4-diff
d-----        2023-01-15     12:03                4-remotebranch
-a----        2023-01-15     12:03              9 .gitignore
-a----        2023-01-15     12:03             34 readme.md

此时我们可以看到,当前目录下有 4-remotebranch 这个文件夹了。

注意:在拉取远程分支之前,最好先 git pull 一下。不然可能找不到该分支。

git fetch

git fetch ​是将远程主机的最新内容拉到本地仓库

git pull​ 则是将远程主机的最新内容拉下来后直接合并,即:git pull = git fetch + git merge​,这样可能会产生冲突,需要手动解决。

相比之下,git fetch 是一个更安全的选择,因为它从你的远程仓库拉入所有的提交,但不会对你的本地文件做任何修改。你可以在合并前检查哪些文件有变化,哪些文件可能导致冲突。

分支改名

之前我们说过了怎么修改分支名:

$ git branch -m <old_branch_name> <new_branch_name>

但这样是仅能修改本地的分支名的,如果远程仓库上也有该分支,并且想要改名,还需进行以下步骤。

推送这个新分支,从而创建一个新的远程分支:

$ git push origin <new_branch_name>

然后删除远程分支:

$ git push origin -d -f <old_branch_name>

同时推送多个仓库

先前,我们添加了两个远程参考,一个 Gitee,一个 GitHub。如果我们要推送,需要分别推送分支到两个仓库上,有没办法一次性就推送两次呢?有的。

比如,我们想推送到 Gitee 的时候,默认也推送到 GitHub,那么可以给 gitee 添加一个远程的 push 地址,这样一次 push 就能同时 push 到两个地址上面

语法格式:

$ git remote set-url --add 远程仓库名 另一个仓库的push地址

例如:

$ git remote -v
gitee   git@gitee.com:peterjxl/LearnGit.git (fetch)
gitee   git@gitee.com:peterjxl/LearnGit.git (push)
github  git@github.com:Peter-JXL/LearnGit.git (fetch)
github  git@github.com:Peter-JXL/LearnGit.git (push)git remote set-url --add gitee git@github.com:Peter-JXL/LearnGit.git$ git remote -v //查看是否多了一条push地址
gitee   git@gitee.com:peterjxl/LearnGit.git (fetch)
gitee   git@gitee.com:peterjxl/LearnGit.git (push)
gitee   git@github.com:Peter-JXL/LearnGit.git (push)
github  git@github.com:Peter-JXL/LearnGit.git (fetch)
github  git@github.com:Peter-JXL/LearnGit.git (push)

至此,我们就可以直接一个 push,同时推送到两个 git 地址。我们来测试下:

$ echo "test push two repository" >> 4-diff/testDiff.txt
$ git add 4-diff/testDiff.txt
$ git commit -m "add test push two repository"$ git push gitee
Enumerating objects: 13, done.
Counting objects: 100% (13/13), done.
Delta compression using up to 20 threads
Compressing objects: 100% (6/6), done.
Writing objects: 100% (12/12), 946 bytes | 946.00 KiB/s, done.
Total 12 (delta 3), reused 0 (delta 0), pack-reused 0
remote: Powered by GITEE.COM [GNK-6.4]
To gitee.com:peterjxl/LearnGit.git378332f..5ba73a6  master -> master
Enumerating objects: 13, done.
Counting objects: 100% (13/13), done.
Delta compression using up to 20 threads
Compressing objects: 100% (6/6), done.
Writing objects: 100% (12/12), 946 bytes | 946.00 KiB/s, done.
Total 12 (delta 3), reused 0 (delta 0), pack-reused 0
remote: Resolving deltas: 100% (3/3), completed with 1 local object.
To github.com:Peter-JXL/LearnGit.git378332f..5ba73a6  master -> master

可以看到 git push 的输出中,既有 Gitee 的输出,也有 GitHub 的输出。

如果不想同时推送多个仓库,可删除 push 地址:

$ git remote set-url --delete origin 地址

以上配置是在 .git/config ​文件里存储的。我们也可以通过直接修改该文件来达到配置的效果

原始内容:

[core]repositoryformatversion = 0filemode = falsebare = falselogallrefupdates = truesymlinks = falseignorecase = true
[remote "gitee"]url = git@gitee.com:peterjxl/LearnGit.gitfetch = +refs/heads/*:refs/remotes/gitee/*
[branch "master"]remote = giteemerge = refs/heads/master
[remote "github"]url = git@github.com:Peter-JXL/LearnGit.gitfetch = +refs/heads/*:refs/remotes/github/*

我们在 Gitee 里,添加一行:

url = git@github.com:Peter-JXL/LearnGit.git

修改后:

[core]repositoryformatversion = 0filemode = falsebare = falselogallrefupdates = truesymlinks = falseignorecase = true
[remote "gitee"]url = git@gitee.com:peterjxl/LearnGit.gitfetch = +refs/heads/*:refs/remotes/gitee/*url = git@github.com:Peter-JXL/LearnGit.git
[branch "master"]remote = giteemerge = refs/heads/master
[remote "github"]url = git@github.com:Peter-JXL/LearnGit.gitfetch = +refs/heads/*:refs/remotes/github/*

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/55095.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

17.第二阶段x86游戏实战2-线程发包和明文包

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 本次游戏没法给 内容参考于&#xff1a;微尘网络安全 本人写的内容纯属胡编乱造&#xff0c;全都是合成造假&#xff0c;仅仅只是为了娱乐&#xff0c;请不要…

kubernetes的网络

kubernetes网络模型 Kubernetes采用的是基于扁平地址空间的网络模型&#xff0c;集群中的每个Pod都有自己的IP地址&#xff0c;Pod之间不需要配置NAT就能直接通信&#xff0c;同一个Pod中的容器共享Pod的IP&#xff0c;能够通过localhost通信Pod容器内的通信 当Pod被调度到某个…

车辆重识别(去噪扩散概率模型)论文阅读2024/9/27

[2] Denoising Diffusion Probabilistic Models 作者&#xff1a;Jonathan Ho Ajay Jain Pieter Abbeel 单位&#xff1a;加州大学伯克利分校 摘要&#xff1a; 我们提出了高质量的图像合成结果使用扩散概率模型&#xff0c;一类潜变量模型从非平衡热力学的考虑启发。我们的最…

【hot100-java】【零钱兑换】

R9-dp篇 class Solution {public int coinChange(int[] coins, int amount) {int ncoins.length;int [][] fnew int[n1][amount1];//除2防止下面1溢出Arrays.fill(f[0],Integer.MAX_VALUE/2);f[0][0]0;for (int i0;i<n;i){for (int c0;c<amount;c){if(c<coins[i]) f[i…

5G NR 协议规范表(对应3GPP 协议编号)

文章目录 5G NR 协议规范表&#xff08;对应3GPP 协议编号&#xff09;5G 架构相关协议5G 新空口相关协议无线接入网相关协议终端相关协议 5G NR 协议规范表&#xff08;对应3GPP 协议编号&#xff09; 5G 架构相关协议 5G 新空口相关协议 无线接入网相关协议 终端相关协议

网页设计html心得

一&#xff0c;认识网页 说到网页&#xff0c;其实大家并不陌生 1.1网页究竟是什么&#xff1f; 网页主要由文字、图像和超链接等元素构成。当然&#xff0c;除了这些元素&#xff0c;网页中还可以包含音频、视频以及Flash等。 1.2网页是如何形成的呢&#xff1f; 1.特殊的…

uni-app在线预览pdf

这里推荐下载pdf.js 插件 PDF.js - Browse Files at SourceForge.net 特此注意 如果报 Promise.withResolvers is not a function 请去查看版本兼容问题 降低pdf.js版本提高node版本 下载完成后 在 static 文件夹下新建 pdf 文件夹&#xff0c;将解压文件放进 pdf 文件…

监控和日志管理:深入了解Nagios、Zabbix和Prometheus

在现代IT运维中&#xff0c;监控和日志管理是确保系统稳定性和性能的关键环节。本文将介绍三种流行的监控工具&#xff1a;Nagios、Zabbix和Prometheus&#xff0c;帮助您了解它们的特点、使用场景以及如何进行基本配置。 一、Nagios Nagios 是一个强大的开源监控系统&#x…

从0新建一个微信小程序实现一个简单跳转

首先 1.从这里下载开发工具 https://developers.weixin.qq.com/miniprogram/dev/framework/quickstart/getstart.htm 2. 等下载完毕后 创建一个空白项目 在pages目录下右键创建一个page : testUI,这时候会生成四个文件 新建一个文件夹 testUI 给他们放一起 3.增加一个按钮 …

蛋白质结构中模型的提取

在 Biopython 的 PDB 模块中,提取 PDB 结构中的 model 信息相对直观。在 PyMMCIF 包中,我们可以通过提取 atom_site 数据中的 pdbx_PDB_model_num 字段来识别结构中的不同模型。下面是如何使用这两个包分别提取结构的 model 信息的示例代码。 1. Biopython PDB 模块提取模型…

尚品汇-自动化部署-Jenkins的安装与环境配置(五十六)

目录&#xff1a; 自动化持续集成 &#xff08;1&#xff09;环境准备 &#xff08;2&#xff09;初始化 Jenkins 插件和管理员用户 &#xff08;3&#xff09;工作流程 &#xff08;4&#xff09;配置 Jenkins 构建工具 自动化持续集成 互联网软件的开发和发布&#xf…

多线程事务管理:Spring Boot 实现全局事务回滚

多线程事务管理:Spring Boot 实现全局事务回滚 在日常开发中,我们常常会遇到需要在多线程环境下进行数据库操作的场景。这类操作的挑战在于如何保证多个线程中的数据库操作要么一起成功,要么一起失败,即 事务的原子性。尤其是在多个线程并发执行的情况下,确保事务的一致性…

门面(外观)模式

简介 门面模式&#xff08;Facade Pattern&#xff09;又叫作外观模式&#xff0c;提供了一个统一的接口&#xff0c;用来访问子系统中的一群接口。其主要特征是定义了一个高层接口&#xff0c;让子系统更容易使用&#xff0c;属于结构型设计模式。 通用模板 创建子系统角色类…

多米诺骨牌(模拟)

初始化数据结构&#xff1a; 使用一个布尔数组 arr 来表示每个位置是否被占用。初始时所有位置均为 false&#xff08;未占用&#xff09;。使用一个 LinkedHashMap&#xff08;命名为 queue&#xff09;来记录最近的 R 操作的位置。这个结构可以保持插入顺序&#xff0c;方便后…

【AI基础】pytorch lightning 基础学习

传统pytorch工作流是首先定义模型框架&#xff0c;然后写训练和验证&#xff0c;测试循环代码。训练&#xff0c;验证&#xff0c;测试代码写起来比较繁琐。这里介绍使用pytorch lightning 部署模型&#xff0c;加速模型训练和验证&#xff0c;记录。 准备工作 1 安装pytorch…

【分布式微服务云原生】使用Docker体验不同Linux发行版

Docker 允许用户在同一个宿主机上运行多种不同的Linux发行版&#xff0c;而共享同一个宿主机内核。这种方式不仅节省资源&#xff0c;还非常方便进行环境测试和开发。 1. Docker与Linux发行版 Linux内核 发行版 Linux内核与各种发行版软件包组合&#xff0c;构成了一个完整的…

JAVA红娘婚恋相亲交友系统源码全面解析

在数字化时代&#xff0c;红娘婚恋相亲交友系统成为了连接单身男女的重要桥梁。JAVA作为一种流行的编程语言&#xff0c;为开发这样的系统提供了强大的支持。编辑h17711347205以下是对JAVA红娘婚恋相亲交友系统源码的全面解析&#xff0c;以及三段示例代码的展示。 系统概述 …

[产品管理-33]:实验室技术与商业化产品的距离,实验室技术在商业化过程中要越过多少道“坎”?

目录 一、实验室技术 1.1 实验室研究性技术 1.2 技术发展的S曲线 技术发展S曲线的主要阶段和特点 技术发展S曲线的意义和应用 二、实验室技术商业化的路径 2.1 实验室技术与商业化产品的距离 1、技术成熟度与稳定性 - 技术自身 2、市场需求与适应性 - 技术是满足需求 …

Visual Studio 2022

VS&#xff08;Visual Studio&#xff09;是一款由微软开发的集成开发环境&#xff08;IDE&#xff09;&#xff0c;用于开发应用程序、网站以及移动应用等。VS的历史可以追溯到1997年&#xff0c;当时发布了第一个版本的VS。以下是VS的一些重要历史里程碑&#xff1a; Visual …

ArcEngine C#二次开发图层处理:根据属性分割图层(Split)

需求&#xff1a;仅根据某一属性&#xff0c;分割图层&#xff0c;并以属性值命名图层名保存。 众所周知&#xff0c;ArcGIS ArcToolbox中通过Split可以实现图形分割一个图层&#xff0c;以属性值命名图层&#xff0c;如下图所示。 本功能仅依据属性值&#xff0c;将一个shp图…