Git 与远程分支

news2024/9/27 11:28:14

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 -r
  gitee/feature
  gitee/master
  github/feature
  github/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.git
   378332f..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.git
   378332f..5ba73a6  master -> master

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

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

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

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

原始内容:

[core]
        repositoryformatversion = 0
        filemode = false
        bare = false
        logallrefupdates = true
        symlinks = false
        ignorecase = true
[remote "gitee"]
        url = git@gitee.com:peterjxl/LearnGit.git
        fetch = +refs/heads/*:refs/remotes/gitee/*
[branch "master"]
        remote = gitee
        merge = refs/heads/master
[remote "github"]
        url = git@github.com:Peter-JXL/LearnGit.git
        fetch = +refs/heads/*:refs/remotes/github/*

我们在 Gitee 里,添加一行:

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

修改后:

[core]
        repositoryformatversion = 0
        filemode = false
        bare = false
        logallrefupdates = true
        symlinks = false
        ignorecase = true
[remote "gitee"]
        url = git@gitee.com:peterjxl/LearnGit.git
        fetch = +refs/heads/*:refs/remotes/gitee/*
        url = git@github.com:Peter-JXL/LearnGit.git
[branch "master"]
        remote = gitee
        merge = refs/heads/master
[remote "github"]
        url = git@github.com:Peter-JXL/LearnGit.git
        fetch = +refs/heads/*:refs/remotes/github/*

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

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

相关文章

什么是分布式缓存,它是如何工作的?

嗨&#xff0c;你好啊&#xff0c;我是猿java 在日常开发中&#xff0c;我们经常会使用到缓存&#xff0c;当数据集较小时&#xff0c;通常将所有缓存数据保存在一台服务器上就足够了&#xff0c;但是当数据集较大时&#xff0c;我们需要将缓存数据分布在多个服务器上&#xf…

无线领夹麦克风怎么挑选?选购麦克风需要注意的五大选购陷阱!

无线领夹麦克风只所以成为现在自媒体行业的主流拾音设备&#xff0c;很大程度取决于它的轻巧的设计以及便携性。相较于传统的手持麦克风&#xff0c;领夹麦在使用时无需手持&#xff0c;直接佩戴在衣领上即可使用&#xff0c;腾出的双手可以更好的投入到录制当中&#xff0c;在…

Python与SQL Server数据库结合导出Excel并做部分修改

Python与SQL Server数据库结合导出Excel并做部分修改 需求&#xff1a;在数据库中提取需要的字段内容&#xff1b;并根据字段内容来提取与拆分数据做为新的列最后导出到Excel文件 # -*- coding: utf-8 -*- import pandas as pd import re import pymssql import timestart_ti…

Activiti的Web在线工作流设计器的几种搭建方式

说明 Activiti Activiti是一个使用Java开发的工作流流程管理(BPM)平台&#xff0c;可以帮助开发者和企业自动化管理业务流程。它提供了一整套工具&#xff0c;用于定义、执行、监控和优化业务流程。Activiti支持BPMN 2.0标准&#xff0c;具有强大的扩展能力和易用性&#xff…

Git GUI操作流程

1&#xff0c;点击运行 Gt GUI 2&#xff0c;界面如下 3&#xff0c;点击Creat new Repository或者在菜单栏点击Repository--new 4,点击Browse选择目录&#xff0c;点击create&#xff0c;创建本地git仓库 5&#xff0c;对应盘里生成一个.git文件&#xff0c;用于版本管理 6&am…

2024最新测评:低代码平台在企业复杂应用场景的适用性如何?

低代码平台种类多&#xff0c;不好一概而论。但最近有做部分低代码平台的测评&#xff0c;供大家参考。 一个月前接到老板紧急任务&#xff1a;调研有没有一款低代码平台能开发我司的软件场景。我司是一家快速发展中的制造业企业&#xff0c;业务遍布全国&#xff0c;需要一个…

DAY81服务攻防-开发框架安全SpringBootStruts2LaravelThinkPHPCVE 复现

知识点&#xff1a; 1、PHP-框架安全-Thinkphp&Laravel 2、J2EE-框架安全-SpringBoot&Struts2 常见语言开发框架&#xff1a; PHP&#xff1a;Thinkphp Laravel YII CodeIgniter CakePHP Zend等 JAVA&#xff1a;Spring MyBatis Hibernate Struts2 Springboot等 P…

Elasticsearch讲解

1.Elasticsearch基本知识 1.基本认识和安装 Elasticsearch是由elastic公司开发的一套搜索引擎技术&#xff0c;它是elastic技术栈中的一部分。完整的技术栈包括&#xff1a; Elasticsearch&#xff1a;用于数据存储、计算和搜索 Logstash/Beats&#xff1a;用于数据收集 Kib…

Dos.ORM简单说明

1 下载Dos.Tools-master 地址&#xff1a;Dos.Tool: 实体生成工具&#xff0c;成熟轻量级ORM、上手简单、性能高、功能强大&#xff01; 2 Dos.ORM仅支持DbFirst模式&#xff0c;即必须先有数据库&#xff0c;这里以Sql Server为例 3 新建项目&#xff0c;添加引用Dos.ORM.dll&…

3.javaweb-Servlet与过滤器

javaweb-Servlet与过滤器 文章目录 javaweb-Servlet与过滤器一、Servlet&#xff1a;server applet二、Servlet做了什么&#xff1f;三、Servlet是什么&#xff1f;四、jsp与Servlet关系五、Servlet API1.主要Servlet API介绍2.如何创建Servlet3.Servlet中主要方法4.ServletReq…

使用Docker快速本地部署RSSHub结合内网穿透访问RSS订阅源

文章目录 前言1. Docker 安装2. Docker 部署Rsshub3. 本地访问Rsshub4. Linux安装Cpolar5. 配置公网地址6. 远程访问Rsshub7. 固定Cpolar公网地址8. 固定地址访问 前言 今天和大家分享的是如何在本地快速简单部署Rsshub工具&#xff0c;并结合cpolar内网穿透工具使用公网地址远…

ArcGIS Desktop使用入门(三)常用工具条——拓扑(下篇:地理数据库拓扑)

系列文章目录 ArcGIS Desktop使用入门&#xff08;一&#xff09;软件初认识 ArcGIS Desktop使用入门&#xff08;二&#xff09;常用工具条——标准工具 ArcGIS Desktop使用入门&#xff08;二&#xff09;常用工具条——编辑器 ArcGIS Desktop使用入门&#xff08;二&#x…

mobaxterm、vscode通过跳板机连接服务器

目标服务器&#xff1a;111.111.11.11 跳板机&#xff1a;100.100.10.10 1. mobaxterm通过跳板机连接服务器 1.1 目标服务器信息 1.2 跳板机信息 1.3 登录 点击登录&#xff0c;会输入密码&#xff0c;成功 参考&#xff1a;https://blog.csdn.net/qq_40636486/article/det…

Linux 运维 | 6.从零开始,Shell编程中正则表达式 RegExp 速成指南

[ 知识是人生的灯塔&#xff0c;只有不断学习&#xff0c;才能照亮前行的道路 ] 0x00 前言概述 在 Linux 运维以及Shell脚本编程中往往会使用到各种文本处理工具&#xff08;例如&#xff0c;文本三剑客 awk、grep、sed&#xff09;以及Shell脚本编程&#xff08;后续作者会在#…

【C语言从不挂科到高绩点】23-指针05-结构体指针【重点知识】

Hello!彦祖们,俺又回来了!!!,继续给大家分享 《C语言从不挂科到高绩点》课程!! 本节将为大家讲解C语言中非常重要的知识点-指针: 本套课程将会从0基础讲解C语言核心技术,适合人群: 大学中开设了C语言课程的同学想要专升本或者考研的同学想要考计算机等级证书的同学想…

CSS在线格式化、美化、压缩工具

网上有不少CSS格式化压缩的工具&#xff0c;但是不少站点有广告干扰&#xff0c;或操作起来不方便&#xff0c;或打开速度比较慢&#xff0c;所以自己定制了这个css格式化压缩的工具&#xff0c;也希望对大家有帮助&#xff0c;提供的这个CSS代码格式化和css在线压缩工具&#…

银发产业新闻 | 饿了么、一龄集团、达因药业、爱奇艺有哪些布局

一周银发产业大事件速览 9月27日 星期五 1 养老服务 国家医保局发布长护险编码规则民政部召开全国养老服务工作推进会议市场监管总局发布《适老家具通用技术要求》中央财政安排3亿元引导资金支持“老年食堂”发展全国老龄委印发《关于深入开展新时代“银龄行动”的指导意见…

行业标准如何立项?具体的步骤有哪些

一、前期准备 1. 明确需求&#xff1a; • 确定所在行业存在哪些问题或不足&#xff0c;需要通过制定行业标准来规范和解决。 • 分析行业发展趋势和市场需求&#xff0c;确保立项的标准具有前瞻性和实用性。 收集资料&#xff1a; 查阅国内外相关行业标准和法律法规&#xff0…

数字单总线输出的工业级温湿度一体传感器-MHT04

温湿度传感芯片 - MHT04&#xff0c;该芯片是数字单总线输出的工业级温湿度一体传感器&#xff0c;采用防尘防水透气的铂金叠层湿敏探头结合高精度电容调理芯片MDC04架构&#xff0c;数字单总线输出&#xff0c;可长距离串联多个节点&#xff0c;适用于仓储、冷链、畜牧、工农业…

SQL 性能调优

什么是 SQL 性能调优 SQL 性能调优是优化 SQL 查询以尽可能高效地运行的过程&#xff0c;从而减少数据库负载并提高整体系统性能。这是通过各种技术实现的&#xff0c;例如分析查询执行计划、优化索引和重写查询以确保最佳执行路径。目标是最大限度地减少执行查询所需的时间和…