Git 与远程分支

news/2024/11/18 19:43:31/文章来源:https://www.cnblogs.com/PeterJXL/p/18435035

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.hqwc.cn/news/804489.html

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

相关文章

pbootcms通过会员自带上传实现留言表单图片文件上传功能

在PBootCMS 3.0会员版本中,你可以通过修改会员上传头像的功能来实现留言上传图片的功能。以下是详细的步骤和示例代码: 步骤复制上传文件将member/comm/upload.html文件复制到上一层目录,命名为comm/upload.html。修改上传接口修改upload.html文件中的上传接口。 将uploadUr…

ctfshow-web入门-信息收集

web1 直接右键检查得出flag

pbootcms上一篇下一篇调用 如何把“没有了”改成英文

在PBootCMS中,如果你希望将“上一篇”和“下一篇”的提示文本从默认的“没有了”改为英文,可以通过添加参数来实现。以下是如何具体操作的步骤和示例代码: 示例代码 原始代码上一篇:{content:precontent} 下一篇:{content:nextcontent}修改后的代码上一篇:{content:preco…

pbootcms被挂马终极解决方案

当PBootCMS网站被黑客攻击并挂马时,需要采取一系列措施来修复和防止再次被攻击。以下是一些具体的步骤和建议: 解决方案替换核心文件替换apps和core文件夹的内容。 如果本地没有备份,可以选择升级到最新版本,因为官方通常会修复已知的安全漏洞。修改robots.txt文件在robots…

排查maven 冲突及解决方式

Maven Maven 是一个以项目为中心的自动化构建工具,主要用于Java项目的管理和构建。它提供了一种统一的方式来描述项目的结构、依赖关系和构建过程,简化了项目的构建和管理。 Maven 的主要特点:项目对象模型(POM):Maven 使用pom.xml文件来定义项目的依赖、插件和构建配置。…

Robot Framework 自动化测试部署常见问题及处理方法(三)

书接上文 8.关于IE浏览器 IE浏览器必须是原生版,即Windows系统原版,非手动升级后的版本 9.用例执行过程中,遇到元素定位不到的情况 原因: ⑴xpath动态变化 ⑵有frame/iframe ⑶没有设置等待,元素未加载完成 解决方法: ⑴若xpath动态变化:重写xpath ⑵若有frame/iframe:…

xxl-job之框架讲解和使用

目录1 xxl-job1.1 前言1.1.1 xxl-job简介1.1.2 任务调度1.1.3 分布式任务调度平台1.2 使用 xxl-job1.2.1 dokcer 安装 xxl-job1.2.1.1 拉取镜像1.2.1.2 创建配置文件1.2.1.3 执行 docker 命令1.2.1.4 登录查看1.2.2 Spring Boot 项目集成 xxl-job1.2.2.1 pom依赖与配置文件1.2.…

救园倒计时:救园最后4天

救园进展 截止9月27日 08:55终身会员:终身VIP会员名额还剩37个,终身VIP会员名额还剩130个 会员总人数:6858(救园开始时是4047) 捐助:收到的在线捐助¥48,950(9月9日开始)救园目的 园子这三年困难阶段靠贷款维持,救园是为了还掉贷款,度过难关。 救园方式 -> 终身会…

将对象的属性为数值型的转换为String

将对象的属性为数值型的转换为String 1、新建一个类 //注意:此处为待转换的类型,return true 不好用,必须将待转换的类型一一列出using Newtonsoft.Json;namespace WinFormsApp1.Common {public class ToStringConverter : JsonConverter{public override bool CanConvert(T…

《HelloGitHub》第 102 期

兴趣是最好的老师,HelloGitHub 让你对编程感兴趣!简介 HelloGitHub 分享 GitHub 上有趣、入门级的开源项目。github.com/521xueweihan/HelloGitHub这里有实战项目、入门教程、黑科技、开源书籍、大厂开源项目等,涵盖多种编程语言 Python、Java、Go、C/C++、Swift...让你在短…

弹幕树洞项目功能新增篇

项目地址 项目后端地址:https://github.com/ZyPLJ/ZYTteeHole项目前端页面地址:ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue目前项目测试访问地址:http://tree.pljzy.top/ 注意是http,输成https就访问到博客里面去了。系列文章📖.NET Core搭配V…

Cisco Secure Firewall Threat Defense 7.6.0 发布下载,新增功能概览

Cisco Secure Firewall Threat Defense 7.6.0 发布下载,新增功能概览Cisco Secure Firewall Threat Defense 7.6.0 发布下载,新增功能概览 Firepower Threat Defense (FTD) Software Release 7.6.0 Firepower 1100/3100/4100/4200/9300 Security Appliance 请访问原文链接:h…